diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 45ef9dee917..c4006a71035 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -56,13 +56,6 @@ {} ] ], - "aria-owns-presentation.html": [ - "138625a1534faca65cb00ff3d615dc4fb3fc080b", - [ - null, - {} - ] - ], "aria-owns-reparent.html": [ "2eaceb66f6957b0240a4f02b0c23b74e8ca4921a", [ @@ -3842,6 +3835,13 @@ } }, "css-view-transitions": { + "document-element-detatched-crash.html": [ + "3c5419a8102c2160ac82e69bf046408b2c542e41", + [ + null, + {} + ] + ], "get-computed-style-crash.html": [ "38cd5af7f83d60976f9712e446a55d11fe07160e", [ @@ -4081,6 +4081,13 @@ null, {} ] + ], + "visited-part-crash.html": [ + "f4cb28995b181c330d3605a96546c1ffb33c4fb1", + [ + null, + {} + ] ] } }, @@ -6116,6 +6123,15 @@ ] }, "scroll-animations": { + "crashtests": { + "invalid-animation-range.html": [ + "43b23c93b607ac943d0c996f1baffed82dc5fbfe", + [ + null, + {} + ] + ] + }, "scroll-timelines": { "animation-with-delay-crash.html": [ "9d821f9e20f58eef9ff5aa0706fa528f3250935f", @@ -8704,6 +8720,48 @@ {} ] ], + "aria-expanded_not_supported_on_alert-manual.html": [ + "1317cc658f76a8e19a4dc862cc638e17a859d0fe", + [ + null, + {} + ] + ], + "aria-expanded_not_supported_on_banner-manual.html": [ + "e1bf9cc7f45a9342d244c262186bbb1636cb2b1b", + [ + null, + {} + ] + ], + "aria-expanded_not_supported_on_dialog-manual.html": [ + "c7feeddf2bbb35e82211055c8dcc5c8e689b815f", + [ + null, + {} + ] + ], + "aria-expanded_not_supported_on_feed-manual.html": [ + "e81f3e49494c499ab2411cbcc7c82d41e5b3d816", + [ + null, + {} + ] + ], + "aria-expanded_not_supported_on_form-manual.html": [ + "6b533da6f7205bad6e14e8cddf525e7adb1e521b", + [ + null, + {} + ] + ], + "aria-expanded_not_supported_on_group-manual.html": [ + "8deb17c2b24a07c1801d214db6990e30cd883d54", + [ + null, + {} + ] + ], "aria-expanded_true-manual.html": [ "30f0c6a0f5d9eedcb7dfd5875b9b91458434efa1", [ @@ -9475,7 +9533,7 @@ ] ], "generic_roledescription_prohibited-manual.html": [ - "7c54dff15495bf6793c88c6fdf2d974af1a47be3", + "07f32ccc5cdd5375bb16b174ce48d4062ba4dbc7", [ null, {} @@ -26023,1637 +26081,1639 @@ ] }, "wai-aria": { - "alertdialog_modal_false-manual.html": [ - "ee64c9dbf0d285707f59a4f2f11674f79822967a", - [ - null, - {} - ] - ], - "alertdialog_modal_true-manual.html": [ - "4affe2fd5e61d718aa89f967d02a79f91570f1af", - [ - null, - {} - ] - ], - "application_activedescendant-manual.html": [ - "a6ef85ac3dd1a00ca10a24b47c6a0da4d548d179", - [ - null, - {} - ] - ], - "application_activedescendant_value_changes-manual.html": [ - "d923c84dea717c384387f32d0d36d2e4de657e8e", - [ - null, - {} - ] - ], - "aria-current_not_declared-manual.html": [ - "ecf95bb64fc1fcd7fcad5565d34ca8d964eb413f", - [ - null, - {} - ] - ], - "aria-current_with_value_changes-manual.html": [ - "d3f1eae0052126b77d9ea73be413cf443f8cd836", - [ - null, - {} - ] - ], - "aria-current_with_value_date-manual.html": [ - "b15f5ec13adc85014a86101d0c13a36e0efd0c8c", - [ - null, - {} - ] - ], - "aria-current_with_value_location-manual.html": [ - "e8cf762c0e7af162dd01e438732e13fbb4fca121", - [ - null, - {} - ] - ], - "aria-current_with_value_page-manual.html": [ - "ba48b738cc0686edc97b471cbe5af931a038c824", - [ - null, - {} - ] - ], - "aria-current_with_value_step-manual.html": [ - "6f4d5986c610a1ddcabff58afa9c62f991d5f094", - [ - null, - {} - ] - ], - "aria-current_with_value_time-manual.html": [ - "046fb817695d4aa25f004c6294f8e269fdb6bd89", - [ - null, - {} - ] - ], - "aria-current_with_value_true-manual.html": [ - "3ce799f8b2cfedb906854599b79fc9e11a847f92", - [ - null, - {} - ] - ], - "aria-current_with_value_unspecified-manual.html": [ - "c017a000a114d087a493d738003c88cb26d81b8a", - [ - null, - {} - ] - ], - "aria-details_pointing_to_details_element-manual.html": [ - "6a0d9d776a6f9308dd26b14f2e7a43df4ee1efce", - [ - null, - {} - ] - ], - "aria-details_pointing_to_div_element-manual.html": [ - "8a46e78d9711a887bb91780cd296033151b5bebe", - [ - null, - {} - ] - ], - "article_in_feed_posinset_and_setsize-manual.html": [ - "9c89dc3fa993f06d5539ee5ebac5365b8b0609ce", - [ - null, - {} - ] - ], - "article_in_feed_setsize_-1-manual.html": [ - "0552f926e942c424650f8fe3c1ab15d4769bd9b8", - [ - null, - {} - ] - ], - "article_not_in_feed_posinset_and_setsize-manual.html": [ - "91cb0e0eb4877a6ab8e963d60654159ed7f7c8d9", - [ - null, - {} - ] - ], - "button_haspopup_dialog-manual.html": [ - "8ba0a22a8d4d7319f5b8318088993fb2603885f7", - [ - null, - {} - ] - ], - "button_haspopup_emptystring-manual.html": [ - "e9091489068aec3746912f34e91e996486b69777", - [ - null, - {} - ] - ], - "button_haspopup_false-manual.html": [ - "97188995e526378196d31e558b09de2640bc4867", - [ - null, - {} - ] - ], - "button_haspopup_foo-manual.html": [ - "a09d21c07416ccc41cfcf7e235f8553baf0c46fc", - [ - null, - {} - ] - ], - "button_haspopup_grid-manual.html": [ - "57c8efbde24d1be47bd91e3343874ccc2240c985", - [ - null, - {} - ] - ], - "button_haspopup_listbox-manual.html": [ - "4191fc40a3c8c3dfcacd57ebcedd81228643bebc", - [ - null, - {} - ] - ], - "button_haspopup_menu-manual.html": [ - "9378993f55817876d17ba1f5d60da47abc7e8190", - [ - null, - {} - ] - ], - "button_haspopup_tree-manual.html": [ - "e62b87f59d64c5eee03583937868dacc9d3ffd85", - [ - null, - {} - ] - ], - "button_haspopup_true-manual.html": [ - "a6d94658d272d2f9f52506aab61cebd7696d66aa", - [ - null, - {} - ] - ], - "button_haspopup_unspecified-manual.html": [ - "96d7095d4ded71226c7105e68c0ba2218bc05de4", - [ - null, - {} - ] - ], - "button_roledescription_empty-manual.html": [ - "d9eb0fe7cc82e534107d0aac34b89497cb321dbf", - [ - null, - {} - ] - ], - "button_roledescription_valid-manual.html": [ - "cdcf6071e619c30e8a884242a85b78d783ff53dc", - [ - null, - {} - ] - ], - "button_roledescription_whitespace_only-manual.html": [ - "59e463778a12adcbe324118ecf75aad3b1e9c59c", - [ - null, - {} - ] - ], - "cell-manual.html": [ - "d9f0eafbe076c9ab9ad8bbf2f6c9ceb5a77ff101", - [ - null, - {} - ] - ], - "cell_aria-colspan_2_on_div-manual.html": [ - "fa120dc5e43d8c23b2e4b86f85025ad6b0287fec", - [ - null, - {} - ] - ], - "cell_aria-colspan_2_on_td_html_colspan_3-manual.html": [ - "a7c65fed3d49b269c61f719edf22ea02a9ff720b", - [ - null, - {} - ] - ], - "cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html": [ - "057918c6b0cd85af3c2e25bfc253ef28cba7ded8", - [ - null, - {} - ] - ], - "cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html": [ - "2c05e6ea71f99948bbeec975069b923e422b34d0", - [ - null, - {} - ] - ], - "cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html": [ - "06212078b74d09a305fa5755c98594adc9bee882", - [ - null, - {} - ] - ], - "cell_aria-rowspan_2_on_div-manual.html": [ - "e94303848dac70e70a99e28b292f68051c3c2eed", - [ - null, - {} - ] - ], - "cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html": [ - "86ea1a4aec1ebcf94f6a2bfa86857aa450e5cc98", - [ - null, - {} - ] - ], - "cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html": [ - "f1572046f29e7fbf7d0ecff0c9b551971bfec216", - [ - null, - {} - ] - ], - "cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html": [ - "0978186febafcfaf39d1db30e9af32dad3ff9182", - [ - null, - {} - ] - ], - "cell_colindex_4-manual.html": [ - "02003065e09b85dc966105d98f38837dc1d57c2e", - [ - null, - {} - ] - ], - "cell_rowindex_4-manual.html": [ - "ea2937efcbfa0484d7eb9557979fea96c647a566", - [ - null, - {} - ] - ], - "checkbox_readonly_false-manual.html": [ - "558dc8e3912daed372f14acf926e56600e526ab2", - [ - null, - {} - ] - ], - "checkbox_readonly_true-manual.html": [ - "f3c879038f75f4c56ef21fee2f6ec098eecf201d", - [ - null, - {} - ] - ], - "checkbox_readonly_unspecified-manual.html": [ - "583985f0009588e52180249342e5de131d963cb0", - [ - null, - {} - ] - ], - "columnheader_aria-colspan_2_on_div-manual.html": [ - "4789ced84d260d67bd937cf130a63528de1ac878", - [ - null, - {} - ] - ], - "columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html": [ - "2ad8cb4bed9d9be89fc2222688d61517d2ede446", - [ - null, - {} - ] - ], - "columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html": [ - "3ac8701f5d7b6c23baad9b561932ad0cba383c8e", - [ - null, - {} - ] - ], - "columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html": [ - "82c75991885f9c57d8a93ea9fb29fb58bf7b1fa2", - [ - null, - {} - ] - ], - "columnheader_aria-rowspan_2_on_div-manual.html": [ - "00c00683924fe2919b8e21a15d11de1146c4e2b3", - [ - null, - {} - ] - ], - "columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html": [ - "256a3d73bde1954ffae5243d0a5d91293b97ca1b", - [ - null, - {} - ] - ], - "columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html": [ - "6327e5fb4ec86649ff515a3725bd5f7ba85c8ccd", - [ - null, - {} - ] - ], - "columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html": [ - "425eb5b15e0ce070ed124165d043eb23d95ebafc", - [ - null, - {} - ] - ], - "columnheader_colindex_4-manual.html": [ - "f44e8343fb05523a71065fe0f8f7d3b088954232", - [ - null, - {} - ] - ], - "columnheader_rowindex_4-manual.html": [ - "7ab7e9c8d0f1f89d4a45b541407c39279ad19429", - [ - null, - {} - ] - ], - "columnheader_selected_false_not_automatically_propagated-manual.html": [ - "7624f2a3b80b6e04afd8a2b499fe4cc25de9c717", - [ - null, - {} - ] - ], - "columnheader_selected_true_not_automatically_propagated-manual.html": [ - "1bc364cb884c3d930e6757631afc5d76ec532a7d", - [ - null, - {} - ] - ], - "combobox_controls_an_invalid_id-manual.html": [ - "91188d8e3ca5c0438ea470e0683b2ef4929a501c", - [ - null, - {} - ] - ], - "combobox_haspopup_dialog-manual.html": [ - "d9cf618d9b55c841c06d962e62301d9b31e923ad", - [ - null, - {} - ] - ], - "combobox_haspopup_false-manual.html": [ - "2b0ca94745a059293749b8165917bfcb5da96ea5", - [ - null, - {} - ] - ], - "combobox_haspopup_grid-manual.html": [ - "a3929cf79e73a99addcaf0a7160535373186143e", - [ - null, - {} - ] - ], - "combobox_haspopup_listbox-manual.html": [ - "e1c9084fd540851d620e4888bc6c882a36db6193", - [ - null, - {} - ] - ], - "combobox_haspopup_menu-manual.html": [ - "a9439ed496ac8fe7cb4db2d65a71507156460fb0", - [ - null, - {} - ] - ], - "combobox_haspopup_tree-manual.html": [ - "a0602b520f7207ddad1655a42edc4ded9d2883a7", - [ - null, - {} - ] - ], - "combobox_haspopup_true-manual.html": [ - "c7548ce5cd3b93755fbd602c350333d6d28c57f6", - [ - null, - {} - ] - ], - "combobox_haspopup_unspecified-manual.html": [ - "cd61076fb4e3ae797d34d26163849543b7064446", - [ - null, - {} - ] - ], - "combobox_orientation_horizontal-manual.html": [ - "a5bcc700eca6edf06edfe7d4cef627f902f30d68", - [ - null, - {} - ] - ], - "combobox_orientation_unspecified-manual.html": [ - "20bd53d8d118e5d8b1ec9d26aa5e16155215ea0c", - [ - null, - {} - ] - ], - "combobox_orientation_vertical-manual.html": [ - "189345c4151bbdd7e3159270cf0fb01acd29aba9", - [ - null, - {} - ] - ], - "combobox_readonly_false-manual.html": [ - "978ab1194842938c95393e81a38fbd25936c3678", - [ - null, - {} - ] - ], - "combobox_readonly_true-manual.html": [ - "26a4302c24b8643e25c6b83c8f55006de7c328ad", - [ - null, - {} - ] - ], - "combobox_readonly_unspecified-manual.html": [ - "4ad87b2c0a91d27b316773a3bd022a4596ba738e", - [ - null, - {} - ] - ], - "dialog_modal_false-manual.html": [ - "6c906d320f15821444bb5de99d0dc6d77e3b4694", - [ - null, - {} - ] - ], - "dialog_modal_true-manual.html": [ - "02cbfb5fe897acda12e58642f30fc34c9af435cd", - [ - null, - {} - ] - ], - "dialog_modal_unspecified-manual.html": [ - "edd4605dad83935bb4566ef299065d250f9dcbf2", - [ - null, - {} - ] - ], - "div_element_without_role_roledescription_valid-manual.html": [ - "68b6cc51c728b339b1686c684c26e172489e8570", - [ - null, - {} - ] - ], - "errormessage_object_in_invalid_state-manual.html": [ - "999656826281546f33fa73232fc08429c34bdfdb", - [ - null, - {} - ] - ], - "errormessage_object_in_valid_state-manual.html": [ - "7c194c6d0ace9ece9b12cd7f04b55d69530096af", - [ - null, - {} - ] - ], - "feed-manual.html": [ - "91fc6778dbfec8480ed578812db3f8a4ca5cc5dc", - [ - null, - {} - ] - ], - "figure-manual.html": [ - "d60973527a9c4fd7270d4262483679efcd521efd", - [ - null, - {} - ] - ], - "grid_aria-readonly_false_automatically_propagated-manual.html": [ - "d373a3023efa1f9bce448970dca89306f6da0caf", - [ - null, - {} - ] - ], - "grid_aria-readonly_true_automatically_propagated-manual.html": [ - "7b6a22e2921a93034ae017f340b8c9a497cbc9da", - [ - null, - {} - ] - ], - "grid_busy_false-manual.html": [ - "48edba5bf765a19d50741d59e9ed4c7f4758eaea", - [ - null, - {} - ] - ], - "grid_busy_true-manual.html": [ - "ddcdf0198f897df038a72de9f891f8034e486db3", - [ - null, - {} - ] - ], - "grid_busy_value_changes-manual.html": [ - "4891198882acf72d50f73c05a2075186100cf870", - [ - null, - {} - ] - ], - "grid_colcount_8-manual.html": [ - "0f03b12605df254eae653094b9714beba4ca88ab", - [ - null, - {} - ] - ], - "grid_columnheader_readonly_false-manual.html": [ - "bb8dd34a92f84074df85226effa0543dc95df0f5", - [ - null, - {} - ] - ], - "grid_columnheader_readonly_true-manual.html": [ - "a81e4cbdced1de0640f1f32ca6286f415a5acda7", - [ - null, - {} - ] - ], - "grid_columnheader_readonly_unspecified-manual.html": [ - "d45d3b9ca71a0b1c8e8978c8635cb2b362a0b4c7", - [ - null, - {} - ] - ], - "grid_columnheader_required_false-manual.html": [ - "b8f7ae332ca6e6b7bb344f842e60d6fe8dc83455", - [ - null, - {} - ] - ], - "grid_columnheader_required_true-manual.html": [ - "76155ab905d682b5c95450c3a7a159fe5ce15047", - [ - null, - {} - ] - ], - "grid_columnheader_required_unspecified-manual.html": [ - "491cbed6f2ffe8ee82274651fede675e569fda0e", - [ - null, - {} - ] - ], - "grid_rowcount_3-manual.html": [ - "3079b59b4de72f52eea82350d3c7877e3900cd28", - [ - null, - {} - ] - ], - "grid_rowheader_readonly_false-manual.html": [ - "883918fd043f8d63aa62497f71c7d3e9ce72f40e", - [ - null, - {} - ] - ], - "grid_rowheader_readonly_true-manual.html": [ - "5d53c3624c6233c6040265624730627adde4dc14", - [ - null, - {} - ] - ], - "grid_rowheader_readonly_unspecified-manual.html": [ - "f9321cac1021bd9c4e4677d5962d20ce88d74669", - [ - null, - {} - ] - ], - "grid_rowheader_required_false-manual.html": [ - "4fafba50a983f726443f6aedcc4081f34a36b1a9", - [ - null, - {} - ] - ], - "grid_rowheader_required_true-manual.html": [ - "0f14d2dea8bd44077820dc3b3331c448385b062d", - [ - null, - {} - ] - ], - "grid_rowheader_required_unspecified-manual.html": [ - "208f0c5e56d7d6aa3ae5ee5459b3162cc2317062", - [ - null, - {} - ] - ], - "gridcell_aria-colspan_2_on_div-manual.html": [ - "c151087767e3b1c50093ca5010664581868eef05", - [ - null, - {} - ] - ], - "gridcell_aria-rowspan_2_on_div-manual.html": [ - "318709b360908482be27f99ebc1c060cc5f1db53", - [ - null, - {} - ] - ], - "gridcell_colindex_4-manual.html": [ - "6ef4fb3a166944114e3be9e9950f10c24c082863", - [ - null, - {} - ] - ], - "gridcell_rowindex_4-manual.html": [ - "8b9daaa7030e3fa77072e816c851800f828875f9", - [ - null, - {} - ] - ], - "group_hidden_undefined_element_not_rendered-manual.html": [ - "ef947859dba1906a2aa7d4be256beb0763a4ccc5", - [ - null, - {} - ] - ], - "group_hidden_undefined_element_rendered-manual.html": [ - "92c067c2160a849320fc08306f18d31e9bb49864", - [ - null, - {} - ] - ], - "heading_level_unspecified-manual.html": [ - "819bc7b60c6d42df7fb94b46f1249f9591359e23", - [ - null, - {} - ] - ], - "keyshortcuts_multiple_shortcuts-manual.html": [ - "ce4074a4f2cdefb01a6686fea3c9a4c2cf5861e5", - [ - null, - {} - ] - ], - "keyshortcuts_one_shortcut-manual.html": [ - "d0238dbf20e7f22220adb0d1b64e8a6069a5f48a", - [ - null, - {} - ] - ], - "listbox_busy_false-manual.html": [ - "9f6b8b36a88ae9074aabaf8c53d8b3cbaa1156a4", - [ - null, - {} - ] - ], - "listbox_busy_true-manual.html": [ - "c8388f7addfd240b40a5407170e996ccbd303795", - [ - null, - {} - ] - ], - "listbox_orientation_horizontal-manual.html": [ - "c718a54eafb837bb70523239e39653e747c97416", - [ - null, - {} - ] - ], - "listbox_orientation_unspecified-manual.html": [ - "7dd2762d6db08c22408a4beb5e56c88268f28493", - [ - null, - {} - ] - ], - "listbox_orientation_vertical-manual.html": [ - "8bcca037d3072dd359054b7fee7692ab21462867", - [ - null, - {} - ] - ], - "listbox_readonly_false-manual.html": [ - "b3bde923a406ecdc3b6c1dead4a2ddf21540ec34", - [ - null, - {} - ] - ], - "listbox_readonly_true-manual.html": [ - "30213919e48879474f68fb20caf53f53e0716583", - [ - null, - {} - ] - ], - "listbox_readonly_unspecified-manual.html": [ - "9283ad24046e27f9d9e91f8853d090d852c6fe68", - [ - null, - {} - ] - ], - "listitem_setsize_-1-manual.html": [ - "7537a4bcd72b3b0fd52dfb85b80f3c55dbdb95e4", - [ - null, - {} - ] - ], - "menu_orientation_horizontal-manual.html": [ - "184c42052e4fe19f03905b63c6694a083595a934", - [ - null, - {} - ] - ], - "menu_orientation_unspecified-manual.html": [ - "07e8e691b9432b539f63dad6e8ee9ed25430a55b", - [ - null, - {} - ] - ], - "menu_orientation_vertical-manual.html": [ - "10a65e997d5a3d3a7b4a55c01e12d98d32c07fe3", - [ - null, - {} - ] - ], - "menubar_busy_false-manual.html": [ - "8224d79b87625eb4407ec2fb62b785638012ec83", - [ - null, - {} - ] - ], - "menubar_busy_true-manual.html": [ - "b1695dcef4caf0dc9e387680da7085e8f0992dce", - [ - null, - {} - ] - ], - "menubar_orientation_horizontal-manual.html": [ - "e47a68e81af133f97684d2c09102f7a83f2b66ab", - [ - null, - {} - ] - ], - "menubar_orientation_unspecified-manual.html": [ - "0e945ae26f24fad7bcf842e165193de35dd81ac4", - [ - null, - {} - ] - ], - "menubar_orientation_vertical-manual.html": [ - "c0830abc7fe84562dbfda4a008055c713f087447", - [ - null, - {} - ] - ], - "menuitem_expanded_false-manual.html": [ - "7e5ca5485bac03490a7f6486ec62f449500fa64d", - [ - null, - {} - ] - ], - "menuitem_expanded_true-manual.html": [ - "a9d9b5df359c8c8e30238cf53bd08c7c04d61765", - [ - null, - {} - ] - ], - "menuitem_posinset_and_setsize-manual.html": [ - "ac0ec8871d5599b57dc99d8f4352f2a3bb7dd0dd", - [ - null, - {} - ] - ], - "menuitemcheckbox_expanded_false-manual.html": [ - "e05ea1af711be9603fe44a6830d89a0abceccb1c", - [ - null, - {} - ] - ], - "menuitemcheckbox_expanded_true-manual.html": [ - "b2ac5db68f32becde41dfe29ec757cb618775fc0", - [ - null, - {} - ] - ], - "menuitemcheckbox_posinset_and_setsize-manual.html": [ - "cf867c1cf927fd475bda19ab08c6b942044429e4", - [ - null, - {} - ] - ], - "menuitemcheckbox_readonly_false-manual.html": [ - "59f12ed0fc992ea1cad913c93ec4729a9b9c01d1", - [ - null, - {} - ] - ], - "menuitemcheckbox_readonly_true-manual.html": [ - "faa9703fda36a390de76458c76090785bc52b2f6", - [ - null, - {} - ] - ], - "menuitemcheckbox_readonly_unspecified-manual.html": [ - "d9b5dc2980724bf363302d50278c3b3efb218754", - [ - null, - {} - ] - ], - "menuitemradio_expanded_false-manual.html": [ - "52c599d90ef0cf6dd60fed9be34b6b00de54a440", - [ - null, - {} - ] - ], - "menuitemradio_expanded_true-manual.html": [ - "601879885fe3afdb531557fc1ac64b0da132a1cb", - [ - null, - {} - ] - ], - "menuitemradio_posinset_and_setsize-manual.html": [ - "d512e95dddbdf02e34648e3415c657aa33f2a96a", - [ - null, - {} - ] - ], - "menuitemradio_readonly_false-manual.html": [ - "164bde7ae177ada9c1dfffca22eef4d0beda519f", - [ - null, - {} - ] - ], - "menuitemradio_readonly_true-manual.html": [ - "70690f372c07a8d4aa97b23ad6e5a3d773848db7", - [ - null, - {} - ] - ], - "menuitemradio_readonly_unspecified-manual.html": [ - "a4257c439f800d0d410a1c45517d010a4e820f2e", - [ - null, - {} - ] - ], - "none-manual.html": [ - "ded346faa6d68864345740772c9b8a51af9ca4a5", - [ - null, - {} - ] - ], - "option_selected_false-manual.html": [ - "02b1ec8293db444645369ee34bf2f093a0dfdbf5", - [ - null, - {} - ] - ], - "option_selected_true-manual.html": [ - "8bb7dd7ef54bb402d098f918bdff28b8f0798f35", - [ - null, - {} - ] - ], - "option_selected_undefined-manual.html": [ - "5930de9a48250300d2c122eea10f93dde265a2b2", - [ - null, - {} - ] - ], - "option_selected_value_changes-manual.html": [ - "2c02a8707d3e128ae74c4b1757397b75ee559d99", - [ - null, - {} - ] - ], - "radiogroup_orientation_horizontal-manual.html": [ - "4943335cf26448995fac6ec2a85b3b928dc3013a", - [ - null, - {} - ] - ], - "radiogroup_orientation_unspecified-manual.html": [ - "40ceab71ca8e10ff54095dac86ec7c90eff775d2", - [ - null, - {} - ] - ], - "radiogroup_orientation_vertical-manual.html": [ - "def4543652a0b1ec6ae83ca221347b6bdeb2bbb3", - [ - null, - {} - ] - ], - "radiogroup_readonly_false-manual.html": [ - "102f51757baf7456dfbc72fb555564d44b03327d", - [ - null, - {} - ] - ], - "radiogroup_readonly_true-manual.html": [ - "0c97e24a8bf0a76d24bcac20f92afcaec8e2ccd4", - [ - null, - {} - ] - ], - "radiogroup_readonly_unspecified-manual.html": [ - "6e8c641ac7b595cd5fc2ace06b168575a51d8c58", - [ - null, - {} - ] - ], - "region_with_name-manual.html": [ - "ba868a77b2e481787208ded2e07e12c16273c508", - [ - null, - {} - ] - ], - "region_without_name-manual.html": [ - "84ea6658e70505466602c856635dbdabb75b4c84", - [ - null, - {} - ] - ], - "row_colindex_4-manual.html": [ - "82ee257d9e51f1dd81ffe3a94a029936e1fcb16f", - [ - null, - {} - ] - ], - "row_rowindex_4-manual.html": [ - "1333219e0486c685ab1a29f91801556e8c58bcd9", - [ - null, - {} - ] - ], - "rowheader_aria-colspan_2_on_div-manual.html": [ - "3d8288895974c786dc21e7e3188da1672ca16dc1", - [ - null, - {} - ] - ], - "rowheader_aria-rowspan_2_on_div-manual.html": [ - "4ddf4f5c9acfbe6b4a46f8e2d74f7e46809e343e", - [ - null, - {} - ] - ], - "rowheader_colindex_4-manual.html": [ - "8b1eb477e47e07371b3fb2f0924ca8a74e746205", - [ - null, - {} - ] - ], - "rowheader_rowindex_4-manual.html": [ - "716403cfeb6101c9bec4839bb8812a7f07e133de", - [ - null, - {} - ] - ], - "rowheader_selected_false_not_automatically_propagated-manual.html": [ - "7cd9a559900769094c42c4986aebb5fb5da0807a", - [ - null, - {} - ] - ], - "rowheader_selected_true_not_automatically_propagated-manual.html": [ - "51b2b68fee31b0241eaa12bdaa12f4fb9fd75596", - [ - null, - {} - ] - ], - "scrollbar_all_values_unspecified-manual.html": [ - "910fe2b11812a8e6ec08ba67fc23a5ffc1acb9a3", - [ - null, - {} - ] - ], - "scrollbar_only_valuenow_unspecified-manual.html": [ - "73e315817635fe552fe7abdcd83b2c926b41a134", - [ - null, - {} - ] - ], - "scrollbar_orientation_unspecified-manual.html": [ - "32791ae1d8df74fd3045cd22a194e032aa8866cd", - [ - null, - {} - ] - ], - "searchbox-manual.html": [ - "979bd0fad45a6ddab51e9c284f72e864393f698c", - [ - null, - {} - ] - ], - "searchbox_activedescendant-manual.html": [ - "a72cf9326364bc44b4cb96f29a94b174016cb04b", - [ - null, - {} - ] - ], - "searchbox_activedescendant_value_changes-manual.html": [ - "956f931ae863ad643821c91783952502e6247a40", - [ - null, - {} - ] - ], - "searchbox_autocomplete_both-manual.html": [ - "ea8b69867946322bda7261e3b9bc8571516b8ddb", - [ - null, - {} - ] - ], - "searchbox_autocomplete_inline-manual.html": [ - "77e707666c563c42d781139244476c317bb76998", - [ - null, - {} - ] - ], - "searchbox_autocomplete_list-manual.html": [ - "0ce8068ea94cf9f34b442837d1da4cd9a2091d2f", - [ - null, - {} - ] - ], - "searchbox_autocomplete_none-manual.html": [ - "341d75c5320116135551df3f8d7b4e750b215a30", - [ - null, - {} - ] - ], - "searchbox_autocomplete_unspecified-manual.html": [ - "59becae655e94f39d9773df4a4eba1086e058929", - [ - null, - {} - ] - ], - "searchbox_multiline_false-manual.html": [ - "8f49eb61e93a4b3de4a0d19ed9f970fc7e75ba77", - [ - null, - {} - ] - ], - "searchbox_multiline_true-manual.html": [ - "47e6c3aaa97011ed2053d0ffa08b4c4ea6bcbda3", - [ - null, - {} - ] - ], - "searchbox_multiline_unspecified-manual.html": [ - "5c1d7f5185aa67b3fdc589b03d0c43401aff5f54", - [ - null, - {} - ] - ], - "searchbox_placeholder-manual.html": [ - "da513456d2de45ee7fd1d371ffb443674201f7d9", - [ - null, - {} - ] - ], - "searchbox_readonly_false-manual.html": [ - "574666a0177b890e1b27e6d60aa2c251e05ffa91", - [ - null, - {} - ] - ], - "searchbox_readonly_true-manual.html": [ - "833f1bc4288c1dba08b0e72573fa691696fdd5b1", - [ - null, - {} - ] - ], - "searchbox_readonly_unspecified-manual.html": [ - "51b9893595d4d0dc14b7c71cbf7c35d7231b226a", - [ - null, - {} - ] - ], - "searchbox_required_false-manual.html": [ - "1bfc8953564d28e199b52abc903aea537f2ce541", - [ - null, - {} - ] - ], - "searchbox_required_true-manual.html": [ - "7e26e5ab03ab4bc45d855b34ebc87ac99b0c7734", - [ - null, - {} - ] - ], - "searchbox_required_unspecified-manual.html": [ - "13489ad13a0ca80b9cda0eb911013ad561ed30fd", - [ - null, - {} - ] - ], - "separator_focusable_all_values_unspecified-manual.html": [ - "fb8e852bb17c196d33cac5475145bdd092fb3e0e", - [ - null, - {} - ] - ], - "separator_focusable_only_valuenow_unspecified-manual.html": [ - "680c2a3605a10fca3bef753b2e6dd08d32c80052", - [ - null, - {} - ] - ], - "separator_focusable_valuetext-manual.html": [ - "5992f15aeb0077ace637e577d1615ee006ce6354", - [ - null, - {} - ] - ], - "separator_orientation_unspecified-manual.html": [ - "3a3901b4244040b42fb2f6b3f63af949bbadc87f", - [ - null, - {} - ] - ], - "separator_unfocusable_all_values_unspecified-manual.html": [ - "171370f422bcbbc357e2b68c405cdac64786c4c3", - [ - null, - {} - ] - ], - "separator_unfocusable_valuetext-manual.html": [ - "db8ee6322dd1356eca5e546c8cc1c20cdfe9849a", - [ - null, - {} - ] - ], - "slider_all_values_unspecified-manual.html": [ - "0dea62e620f7a3a1d8ce21db5a31e4136557e3f1", - [ - null, - {} - ] - ], - "slider_only_valuenow_unspecified-manual.html": [ - "ffcbc783734e3708b33ebe5884d65b2f92cdee62", - [ - null, - {} - ] - ], - "slider_orientation_unspecified-manual.html": [ - "295b0a61960b92c5691c14b66e46ecaad485b8b7", - [ - null, - {} - ] - ], - "slider_readonly_false-manual.html": [ - "f5a70984d51d74c649ca3b1a308c9942efe30a6f", - [ - null, - {} - ] - ], - "slider_readonly_true-manual.html": [ - "2588079d784cfd659df39504032d2494dc481995", - [ - null, - {} - ] - ], - "slider_readonly_unspecified-manual.html": [ - "271325a47d39f3b2d2cb95a0a6b8c49a741d2aea", - [ - null, - {} - ] - ], - "spinbutton_all_values_unspecified-manual.html": [ - "8da69af36d6e8e7ac6028de683ba576d7262ec5d", - [ - null, - {} - ] - ], - "spinbutton_only_aria-valuenow_unspecified-manual.html": [ - "bbb94702fe333831ae34a10cf15aaa796efaf0b5", - [ - null, - {} - ] - ], - "spinbutton_readonly_false-manual.html": [ - "5e9429ca28a46413e56896794a4341813c75e2d4", - [ - null, - {} - ] - ], - "spinbutton_readonly_true-manual.html": [ - "a7a3abe632797531f82b09ca861e87d70f5d259a", - [ - null, - {} - ] - ], - "spinbutton_readonly_unspecified-manual.html": [ - "0976b0737c7acd5e34cd9aa719d2a9141de8f4e1", - [ - null, - {} - ] - ], - "switch_checked_false-manual.html": [ - "ac61802bdfb39a197e14e607c25cc48d895d1f35", - [ - null, - {} - ] - ], - "switch_checked_mixed-manual.html": [ - "a674c7d7bcf6dcbe4134e2fbff97d35395c19832", - [ - null, - {} - ] - ], - "switch_checked_true-manual.html": [ - "e23e7235616334f41fa0c29780e5b42051125659", - [ - null, - {} - ] - ], - "switch_checked_undefined-manual.html": [ - "4f5399e88ceb23d91a4c00d1bd1f4ac562725d18", - [ - null, - {} - ] - ], - "switch_checked_value_changes-manual.html": [ - "b58e52fefb039216c64c48a9701bd9c50f86b4c6", - [ - null, - {} - ] - ], - "switch_readonly_false-manual.html": [ - "e68b6bb0d27aef4cbfad98217151a544fa5231ba", - [ - null, - {} - ] - ], - "switch_readonly_true-manual.html": [ - "605d2d0d9afdf867c1a23c1759b9e10c05fde336", - [ - null, - {} - ] - ], - "switch_readonly_unspecified-manual.html": [ - "0fd582c0e9bace1a25474c05f55d9e8492100335", - [ - null, - {} - ] - ], - "tab_posinset_and_setsize-manual.html": [ - "f27f485ac97bf2423a72507925016f2a2cc227e2", - [ - null, - {} - ] - ], - "table_colcount_-1-manual.html": [ - "2135f6ed8d0d760ddace412faf1e490902fbf8ed", - [ - null, - {} - ] - ], - "table_colcount_8-manual.html": [ - "1b8e0affdd5dd5ff2728fc32fabca877d8a117fc", - [ - null, - {} - ] - ], - "table_rowcount_-1-manual.html": [ - "5e7b5b8bf49aa121b50e6ddacfd768026e025115", - [ - null, - {} - ] - ], - "table_rowcount_3-manual.html": [ - "5bfad69b240d6c6fd57f5a8dc554069771a9f9d4", - [ - null, - {} - ] - ], - "tablist_orientation_horizontal-manual.html": [ - "104668cbb95e044d2055f7a35f69da6adfa93b04", - [ - null, - {} - ] - ], - "tablist_orientation_unspecified-manual.html": [ - "001c2ee77b31778169f377e2be4013912e164910", - [ - null, - {} - ] - ], - "tablist_orientation_vertical-manual.html": [ - "f6fe16e8955cd5914167a943675db0bd7e399ea9", - [ - null, - {} - ] - ], - "term_role-manual.html": [ - "ac5030df950334c912f57821c9ae978c47d49efd", - [ - null, - {} - ] - ], - "textbox_placeholder-manual.html": [ - "fdf0635be67baf7d71e22a43d59cfa551b17d018", - [ - null, - {} - ] - ], - "toolbar_orientation_horizontal-manual.html": [ - "1b8fda8dd60bbab169349ce227574a9737cfbf14", - [ - null, - {} - ] - ], - "toolbar_orientation_unspecified-manual.html": [ - "4607511874bd8b16b47789b20c7a727ffc8ffd88", - [ - null, - {} - ] - ], - "toolbar_orientation_vertical-manual.html": [ - "792952d323d178819a83f237c1f25b8d02274712", - [ - null, - {} - ] - ], - "tree_orientation_horizontal-manual.html": [ - "15813f5f039a7c93581c0132e2913580dac72ea8", - [ - null, - {} - ] - ], - "tree_orientation_unspecified-manual.html": [ - "dfc1bdcc587e104444691895a2840388f1e242f7", - [ - null, - {} - ] - ], - "tree_orientation_vertical-manual.html": [ - "b9afa33ff44cd4e4c3a4646b2398e10e55069bcc", - [ - null, - {} - ] - ], - "treegrid_colcount_8-manual.html": [ - "a3e9ea14963ca5da01235724200d3df4a7f79ad1", - [ - null, - {} - ] - ], - "treegrid_orientation_horizontal-manual.html": [ - "756153abf3bc68e62e68840393645b823f320741", - [ - null, - {} - ] - ], - "treegrid_orientation_unspecified-manual.html": [ - "d536e9afbed7c6d83185c4416cbe424a4bf27941", - [ - null, - {} - ] - ], - "treegrid_orientation_vertical-manual.html": [ - "62a19d09046691bbcccd81922d29efbe5b92c4bd", - [ - null, - {} - ] - ], - "treegrid_rowcount_3-manual.html": [ - "9d9b8acf44700de3166430c34e3b751ce6d8f177", - [ - null, - {} - ] - ], - "treeitem_selected_false-manual.html": [ - "684fda69b6d157bef02d1ef60a9ce9cc602d0f82", - [ - null, - {} - ] - ], - "treeitem_selected_true-manual.html": [ - "b951c54dec674ac8d7e9a537cf8a064f6b4d0d97", - [ - null, - {} - ] - ], - "treeitem_selected_undefined-manual.html": [ - "dddfd3826f094c6557f939734819ea437497aaa0", - [ - null, - {} - ] - ], - "treeitem_selected_value_changes-manual.html": [ - "69734c82ddaa1455b7473c84b27fac49c8cf1c82", - [ - null, - {} - ] - ] + "manual": { + "alertdialog_modal_false-manual.html": [ + "ee64c9dbf0d285707f59a4f2f11674f79822967a", + [ + null, + {} + ] + ], + "alertdialog_modal_true-manual.html": [ + "4affe2fd5e61d718aa89f967d02a79f91570f1af", + [ + null, + {} + ] + ], + "application_activedescendant-manual.html": [ + "a6ef85ac3dd1a00ca10a24b47c6a0da4d548d179", + [ + null, + {} + ] + ], + "application_activedescendant_value_changes-manual.html": [ + "d923c84dea717c384387f32d0d36d2e4de657e8e", + [ + null, + {} + ] + ], + "aria-current_not_declared-manual.html": [ + "ecf95bb64fc1fcd7fcad5565d34ca8d964eb413f", + [ + null, + {} + ] + ], + "aria-current_with_value_changes-manual.html": [ + "d3f1eae0052126b77d9ea73be413cf443f8cd836", + [ + null, + {} + ] + ], + "aria-current_with_value_date-manual.html": [ + "b15f5ec13adc85014a86101d0c13a36e0efd0c8c", + [ + null, + {} + ] + ], + "aria-current_with_value_location-manual.html": [ + "e8cf762c0e7af162dd01e438732e13fbb4fca121", + [ + null, + {} + ] + ], + "aria-current_with_value_page-manual.html": [ + "ba48b738cc0686edc97b471cbe5af931a038c824", + [ + null, + {} + ] + ], + "aria-current_with_value_step-manual.html": [ + "6f4d5986c610a1ddcabff58afa9c62f991d5f094", + [ + null, + {} + ] + ], + "aria-current_with_value_time-manual.html": [ + "046fb817695d4aa25f004c6294f8e269fdb6bd89", + [ + null, + {} + ] + ], + "aria-current_with_value_true-manual.html": [ + "3ce799f8b2cfedb906854599b79fc9e11a847f92", + [ + null, + {} + ] + ], + "aria-current_with_value_unspecified-manual.html": [ + "c017a000a114d087a493d738003c88cb26d81b8a", + [ + null, + {} + ] + ], + "aria-details_pointing_to_details_element-manual.html": [ + "6a0d9d776a6f9308dd26b14f2e7a43df4ee1efce", + [ + null, + {} + ] + ], + "aria-details_pointing_to_div_element-manual.html": [ + "8a46e78d9711a887bb91780cd296033151b5bebe", + [ + null, + {} + ] + ], + "article_in_feed_posinset_and_setsize-manual.html": [ + "9c89dc3fa993f06d5539ee5ebac5365b8b0609ce", + [ + null, + {} + ] + ], + "article_in_feed_setsize_-1-manual.html": [ + "0552f926e942c424650f8fe3c1ab15d4769bd9b8", + [ + null, + {} + ] + ], + "article_not_in_feed_posinset_and_setsize-manual.html": [ + "91cb0e0eb4877a6ab8e963d60654159ed7f7c8d9", + [ + null, + {} + ] + ], + "button_haspopup_dialog-manual.html": [ + "8ba0a22a8d4d7319f5b8318088993fb2603885f7", + [ + null, + {} + ] + ], + "button_haspopup_emptystring-manual.html": [ + "e9091489068aec3746912f34e91e996486b69777", + [ + null, + {} + ] + ], + "button_haspopup_false-manual.html": [ + "97188995e526378196d31e558b09de2640bc4867", + [ + null, + {} + ] + ], + "button_haspopup_foo-manual.html": [ + "a09d21c07416ccc41cfcf7e235f8553baf0c46fc", + [ + null, + {} + ] + ], + "button_haspopup_grid-manual.html": [ + "57c8efbde24d1be47bd91e3343874ccc2240c985", + [ + null, + {} + ] + ], + "button_haspopup_listbox-manual.html": [ + "4191fc40a3c8c3dfcacd57ebcedd81228643bebc", + [ + null, + {} + ] + ], + "button_haspopup_menu-manual.html": [ + "9378993f55817876d17ba1f5d60da47abc7e8190", + [ + null, + {} + ] + ], + "button_haspopup_tree-manual.html": [ + "e62b87f59d64c5eee03583937868dacc9d3ffd85", + [ + null, + {} + ] + ], + "button_haspopup_true-manual.html": [ + "a6d94658d272d2f9f52506aab61cebd7696d66aa", + [ + null, + {} + ] + ], + "button_haspopup_unspecified-manual.html": [ + "96d7095d4ded71226c7105e68c0ba2218bc05de4", + [ + null, + {} + ] + ], + "button_roledescription_empty-manual.html": [ + "d9eb0fe7cc82e534107d0aac34b89497cb321dbf", + [ + null, + {} + ] + ], + "button_roledescription_valid-manual.html": [ + "cdcf6071e619c30e8a884242a85b78d783ff53dc", + [ + null, + {} + ] + ], + "button_roledescription_whitespace_only-manual.html": [ + "59e463778a12adcbe324118ecf75aad3b1e9c59c", + [ + null, + {} + ] + ], + "cell-manual.html": [ + "d9f0eafbe076c9ab9ad8bbf2f6c9ceb5a77ff101", + [ + null, + {} + ] + ], + "cell_aria-colspan_2_on_div-manual.html": [ + "fa120dc5e43d8c23b2e4b86f85025ad6b0287fec", + [ + null, + {} + ] + ], + "cell_aria-colspan_2_on_td_html_colspan_3-manual.html": [ + "a7c65fed3d49b269c61f719edf22ea02a9ff720b", + [ + null, + {} + ] + ], + "cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html": [ + "057918c6b0cd85af3c2e25bfc253ef28cba7ded8", + [ + null, + {} + ] + ], + "cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html": [ + "2c05e6ea71f99948bbeec975069b923e422b34d0", + [ + null, + {} + ] + ], + "cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html": [ + "06212078b74d09a305fa5755c98594adc9bee882", + [ + null, + {} + ] + ], + "cell_aria-rowspan_2_on_div-manual.html": [ + "e94303848dac70e70a99e28b292f68051c3c2eed", + [ + null, + {} + ] + ], + "cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html": [ + "86ea1a4aec1ebcf94f6a2bfa86857aa450e5cc98", + [ + null, + {} + ] + ], + "cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html": [ + "f1572046f29e7fbf7d0ecff0c9b551971bfec216", + [ + null, + {} + ] + ], + "cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html": [ + "0978186febafcfaf39d1db30e9af32dad3ff9182", + [ + null, + {} + ] + ], + "cell_colindex_4-manual.html": [ + "02003065e09b85dc966105d98f38837dc1d57c2e", + [ + null, + {} + ] + ], + "cell_rowindex_4-manual.html": [ + "ea2937efcbfa0484d7eb9557979fea96c647a566", + [ + null, + {} + ] + ], + "checkbox_readonly_false-manual.html": [ + "558dc8e3912daed372f14acf926e56600e526ab2", + [ + null, + {} + ] + ], + "checkbox_readonly_true-manual.html": [ + "f3c879038f75f4c56ef21fee2f6ec098eecf201d", + [ + null, + {} + ] + ], + "checkbox_readonly_unspecified-manual.html": [ + "583985f0009588e52180249342e5de131d963cb0", + [ + null, + {} + ] + ], + "columnheader_aria-colspan_2_on_div-manual.html": [ + "4789ced84d260d67bd937cf130a63528de1ac878", + [ + null, + {} + ] + ], + "columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html": [ + "2ad8cb4bed9d9be89fc2222688d61517d2ede446", + [ + null, + {} + ] + ], + "columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html": [ + "3ac8701f5d7b6c23baad9b561932ad0cba383c8e", + [ + null, + {} + ] + ], + "columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html": [ + "82c75991885f9c57d8a93ea9fb29fb58bf7b1fa2", + [ + null, + {} + ] + ], + "columnheader_aria-rowspan_2_on_div-manual.html": [ + "00c00683924fe2919b8e21a15d11de1146c4e2b3", + [ + null, + {} + ] + ], + "columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html": [ + "256a3d73bde1954ffae5243d0a5d91293b97ca1b", + [ + null, + {} + ] + ], + "columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html": [ + "6327e5fb4ec86649ff515a3725bd5f7ba85c8ccd", + [ + null, + {} + ] + ], + "columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html": [ + "425eb5b15e0ce070ed124165d043eb23d95ebafc", + [ + null, + {} + ] + ], + "columnheader_colindex_4-manual.html": [ + "f44e8343fb05523a71065fe0f8f7d3b088954232", + [ + null, + {} + ] + ], + "columnheader_rowindex_4-manual.html": [ + "7ab7e9c8d0f1f89d4a45b541407c39279ad19429", + [ + null, + {} + ] + ], + "columnheader_selected_false_not_automatically_propagated-manual.html": [ + "7624f2a3b80b6e04afd8a2b499fe4cc25de9c717", + [ + null, + {} + ] + ], + "columnheader_selected_true_not_automatically_propagated-manual.html": [ + "1bc364cb884c3d930e6757631afc5d76ec532a7d", + [ + null, + {} + ] + ], + "combobox_controls_an_invalid_id-manual.html": [ + "91188d8e3ca5c0438ea470e0683b2ef4929a501c", + [ + null, + {} + ] + ], + "combobox_haspopup_dialog-manual.html": [ + "d9cf618d9b55c841c06d962e62301d9b31e923ad", + [ + null, + {} + ] + ], + "combobox_haspopup_false-manual.html": [ + "2b0ca94745a059293749b8165917bfcb5da96ea5", + [ + null, + {} + ] + ], + "combobox_haspopup_grid-manual.html": [ + "a3929cf79e73a99addcaf0a7160535373186143e", + [ + null, + {} + ] + ], + "combobox_haspopup_listbox-manual.html": [ + "e1c9084fd540851d620e4888bc6c882a36db6193", + [ + null, + {} + ] + ], + "combobox_haspopup_menu-manual.html": [ + "a9439ed496ac8fe7cb4db2d65a71507156460fb0", + [ + null, + {} + ] + ], + "combobox_haspopup_tree-manual.html": [ + "a0602b520f7207ddad1655a42edc4ded9d2883a7", + [ + null, + {} + ] + ], + "combobox_haspopup_true-manual.html": [ + "c7548ce5cd3b93755fbd602c350333d6d28c57f6", + [ + null, + {} + ] + ], + "combobox_haspopup_unspecified-manual.html": [ + "cd61076fb4e3ae797d34d26163849543b7064446", + [ + null, + {} + ] + ], + "combobox_orientation_horizontal-manual.html": [ + "a5bcc700eca6edf06edfe7d4cef627f902f30d68", + [ + null, + {} + ] + ], + "combobox_orientation_unspecified-manual.html": [ + "20bd53d8d118e5d8b1ec9d26aa5e16155215ea0c", + [ + null, + {} + ] + ], + "combobox_orientation_vertical-manual.html": [ + "189345c4151bbdd7e3159270cf0fb01acd29aba9", + [ + null, + {} + ] + ], + "combobox_readonly_false-manual.html": [ + "978ab1194842938c95393e81a38fbd25936c3678", + [ + null, + {} + ] + ], + "combobox_readonly_true-manual.html": [ + "26a4302c24b8643e25c6b83c8f55006de7c328ad", + [ + null, + {} + ] + ], + "combobox_readonly_unspecified-manual.html": [ + "4ad87b2c0a91d27b316773a3bd022a4596ba738e", + [ + null, + {} + ] + ], + "dialog_modal_false-manual.html": [ + "6c906d320f15821444bb5de99d0dc6d77e3b4694", + [ + null, + {} + ] + ], + "dialog_modal_true-manual.html": [ + "02cbfb5fe897acda12e58642f30fc34c9af435cd", + [ + null, + {} + ] + ], + "dialog_modal_unspecified-manual.html": [ + "edd4605dad83935bb4566ef299065d250f9dcbf2", + [ + null, + {} + ] + ], + "div_element_without_role_roledescription_valid-manual.html": [ + "68b6cc51c728b339b1686c684c26e172489e8570", + [ + null, + {} + ] + ], + "errormessage_object_in_invalid_state-manual.html": [ + "999656826281546f33fa73232fc08429c34bdfdb", + [ + null, + {} + ] + ], + "errormessage_object_in_valid_state-manual.html": [ + "7c194c6d0ace9ece9b12cd7f04b55d69530096af", + [ + null, + {} + ] + ], + "feed-manual.html": [ + "91fc6778dbfec8480ed578812db3f8a4ca5cc5dc", + [ + null, + {} + ] + ], + "figure-manual.html": [ + "d60973527a9c4fd7270d4262483679efcd521efd", + [ + null, + {} + ] + ], + "grid_aria-readonly_false_automatically_propagated-manual.html": [ + "d373a3023efa1f9bce448970dca89306f6da0caf", + [ + null, + {} + ] + ], + "grid_aria-readonly_true_automatically_propagated-manual.html": [ + "7b6a22e2921a93034ae017f340b8c9a497cbc9da", + [ + null, + {} + ] + ], + "grid_busy_false-manual.html": [ + "48edba5bf765a19d50741d59e9ed4c7f4758eaea", + [ + null, + {} + ] + ], + "grid_busy_true-manual.html": [ + "ddcdf0198f897df038a72de9f891f8034e486db3", + [ + null, + {} + ] + ], + "grid_busy_value_changes-manual.html": [ + "4891198882acf72d50f73c05a2075186100cf870", + [ + null, + {} + ] + ], + "grid_colcount_8-manual.html": [ + "0f03b12605df254eae653094b9714beba4ca88ab", + [ + null, + {} + ] + ], + "grid_columnheader_readonly_false-manual.html": [ + "bb8dd34a92f84074df85226effa0543dc95df0f5", + [ + null, + {} + ] + ], + "grid_columnheader_readonly_true-manual.html": [ + "a81e4cbdced1de0640f1f32ca6286f415a5acda7", + [ + null, + {} + ] + ], + "grid_columnheader_readonly_unspecified-manual.html": [ + "d45d3b9ca71a0b1c8e8978c8635cb2b362a0b4c7", + [ + null, + {} + ] + ], + "grid_columnheader_required_false-manual.html": [ + "b8f7ae332ca6e6b7bb344f842e60d6fe8dc83455", + [ + null, + {} + ] + ], + "grid_columnheader_required_true-manual.html": [ + "76155ab905d682b5c95450c3a7a159fe5ce15047", + [ + null, + {} + ] + ], + "grid_columnheader_required_unspecified-manual.html": [ + "491cbed6f2ffe8ee82274651fede675e569fda0e", + [ + null, + {} + ] + ], + "grid_rowcount_3-manual.html": [ + "3079b59b4de72f52eea82350d3c7877e3900cd28", + [ + null, + {} + ] + ], + "grid_rowheader_readonly_false-manual.html": [ + "883918fd043f8d63aa62497f71c7d3e9ce72f40e", + [ + null, + {} + ] + ], + "grid_rowheader_readonly_true-manual.html": [ + "5d53c3624c6233c6040265624730627adde4dc14", + [ + null, + {} + ] + ], + "grid_rowheader_readonly_unspecified-manual.html": [ + "f9321cac1021bd9c4e4677d5962d20ce88d74669", + [ + null, + {} + ] + ], + "grid_rowheader_required_false-manual.html": [ + "4fafba50a983f726443f6aedcc4081f34a36b1a9", + [ + null, + {} + ] + ], + "grid_rowheader_required_true-manual.html": [ + "0f14d2dea8bd44077820dc3b3331c448385b062d", + [ + null, + {} + ] + ], + "grid_rowheader_required_unspecified-manual.html": [ + "208f0c5e56d7d6aa3ae5ee5459b3162cc2317062", + [ + null, + {} + ] + ], + "gridcell_aria-colspan_2_on_div-manual.html": [ + "c151087767e3b1c50093ca5010664581868eef05", + [ + null, + {} + ] + ], + "gridcell_aria-rowspan_2_on_div-manual.html": [ + "318709b360908482be27f99ebc1c060cc5f1db53", + [ + null, + {} + ] + ], + "gridcell_colindex_4-manual.html": [ + "6ef4fb3a166944114e3be9e9950f10c24c082863", + [ + null, + {} + ] + ], + "gridcell_rowindex_4-manual.html": [ + "8b9daaa7030e3fa77072e816c851800f828875f9", + [ + null, + {} + ] + ], + "group_hidden_undefined_element_not_rendered-manual.html": [ + "ef947859dba1906a2aa7d4be256beb0763a4ccc5", + [ + null, + {} + ] + ], + "group_hidden_undefined_element_rendered-manual.html": [ + "92c067c2160a849320fc08306f18d31e9bb49864", + [ + null, + {} + ] + ], + "heading_level_unspecified-manual.html": [ + "819bc7b60c6d42df7fb94b46f1249f9591359e23", + [ + null, + {} + ] + ], + "keyshortcuts_multiple_shortcuts-manual.html": [ + "ce4074a4f2cdefb01a6686fea3c9a4c2cf5861e5", + [ + null, + {} + ] + ], + "keyshortcuts_one_shortcut-manual.html": [ + "d0238dbf20e7f22220adb0d1b64e8a6069a5f48a", + [ + null, + {} + ] + ], + "listbox_busy_false-manual.html": [ + "9f6b8b36a88ae9074aabaf8c53d8b3cbaa1156a4", + [ + null, + {} + ] + ], + "listbox_busy_true-manual.html": [ + "c8388f7addfd240b40a5407170e996ccbd303795", + [ + null, + {} + ] + ], + "listbox_orientation_horizontal-manual.html": [ + "c718a54eafb837bb70523239e39653e747c97416", + [ + null, + {} + ] + ], + "listbox_orientation_unspecified-manual.html": [ + "7dd2762d6db08c22408a4beb5e56c88268f28493", + [ + null, + {} + ] + ], + "listbox_orientation_vertical-manual.html": [ + "8bcca037d3072dd359054b7fee7692ab21462867", + [ + null, + {} + ] + ], + "listbox_readonly_false-manual.html": [ + "b3bde923a406ecdc3b6c1dead4a2ddf21540ec34", + [ + null, + {} + ] + ], + "listbox_readonly_true-manual.html": [ + "30213919e48879474f68fb20caf53f53e0716583", + [ + null, + {} + ] + ], + "listbox_readonly_unspecified-manual.html": [ + "9283ad24046e27f9d9e91f8853d090d852c6fe68", + [ + null, + {} + ] + ], + "listitem_setsize_-1-manual.html": [ + "7537a4bcd72b3b0fd52dfb85b80f3c55dbdb95e4", + [ + null, + {} + ] + ], + "menu_orientation_horizontal-manual.html": [ + "184c42052e4fe19f03905b63c6694a083595a934", + [ + null, + {} + ] + ], + "menu_orientation_unspecified-manual.html": [ + "07e8e691b9432b539f63dad6e8ee9ed25430a55b", + [ + null, + {} + ] + ], + "menu_orientation_vertical-manual.html": [ + "10a65e997d5a3d3a7b4a55c01e12d98d32c07fe3", + [ + null, + {} + ] + ], + "menubar_busy_false-manual.html": [ + "8224d79b87625eb4407ec2fb62b785638012ec83", + [ + null, + {} + ] + ], + "menubar_busy_true-manual.html": [ + "b1695dcef4caf0dc9e387680da7085e8f0992dce", + [ + null, + {} + ] + ], + "menubar_orientation_horizontal-manual.html": [ + "e47a68e81af133f97684d2c09102f7a83f2b66ab", + [ + null, + {} + ] + ], + "menubar_orientation_unspecified-manual.html": [ + "0e945ae26f24fad7bcf842e165193de35dd81ac4", + [ + null, + {} + ] + ], + "menubar_orientation_vertical-manual.html": [ + "c0830abc7fe84562dbfda4a008055c713f087447", + [ + null, + {} + ] + ], + "menuitem_expanded_false-manual.html": [ + "7e5ca5485bac03490a7f6486ec62f449500fa64d", + [ + null, + {} + ] + ], + "menuitem_expanded_true-manual.html": [ + "a9d9b5df359c8c8e30238cf53bd08c7c04d61765", + [ + null, + {} + ] + ], + "menuitem_posinset_and_setsize-manual.html": [ + "ac0ec8871d5599b57dc99d8f4352f2a3bb7dd0dd", + [ + null, + {} + ] + ], + "menuitemcheckbox_expanded_false-manual.html": [ + "e05ea1af711be9603fe44a6830d89a0abceccb1c", + [ + null, + {} + ] + ], + "menuitemcheckbox_expanded_true-manual.html": [ + "b2ac5db68f32becde41dfe29ec757cb618775fc0", + [ + null, + {} + ] + ], + "menuitemcheckbox_posinset_and_setsize-manual.html": [ + "cf867c1cf927fd475bda19ab08c6b942044429e4", + [ + null, + {} + ] + ], + "menuitemcheckbox_readonly_false-manual.html": [ + "59f12ed0fc992ea1cad913c93ec4729a9b9c01d1", + [ + null, + {} + ] + ], + "menuitemcheckbox_readonly_true-manual.html": [ + "faa9703fda36a390de76458c76090785bc52b2f6", + [ + null, + {} + ] + ], + "menuitemcheckbox_readonly_unspecified-manual.html": [ + "d9b5dc2980724bf363302d50278c3b3efb218754", + [ + null, + {} + ] + ], + "menuitemradio_expanded_false-manual.html": [ + "52c599d90ef0cf6dd60fed9be34b6b00de54a440", + [ + null, + {} + ] + ], + "menuitemradio_expanded_true-manual.html": [ + "601879885fe3afdb531557fc1ac64b0da132a1cb", + [ + null, + {} + ] + ], + "menuitemradio_posinset_and_setsize-manual.html": [ + "d512e95dddbdf02e34648e3415c657aa33f2a96a", + [ + null, + {} + ] + ], + "menuitemradio_readonly_false-manual.html": [ + "164bde7ae177ada9c1dfffca22eef4d0beda519f", + [ + null, + {} + ] + ], + "menuitemradio_readonly_true-manual.html": [ + "70690f372c07a8d4aa97b23ad6e5a3d773848db7", + [ + null, + {} + ] + ], + "menuitemradio_readonly_unspecified-manual.html": [ + "a4257c439f800d0d410a1c45517d010a4e820f2e", + [ + null, + {} + ] + ], + "none-manual.html": [ + "ded346faa6d68864345740772c9b8a51af9ca4a5", + [ + null, + {} + ] + ], + "option_selected_false-manual.html": [ + "02b1ec8293db444645369ee34bf2f093a0dfdbf5", + [ + null, + {} + ] + ], + "option_selected_true-manual.html": [ + "8bb7dd7ef54bb402d098f918bdff28b8f0798f35", + [ + null, + {} + ] + ], + "option_selected_undefined-manual.html": [ + "5930de9a48250300d2c122eea10f93dde265a2b2", + [ + null, + {} + ] + ], + "option_selected_value_changes-manual.html": [ + "2c02a8707d3e128ae74c4b1757397b75ee559d99", + [ + null, + {} + ] + ], + "radiogroup_orientation_horizontal-manual.html": [ + "4943335cf26448995fac6ec2a85b3b928dc3013a", + [ + null, + {} + ] + ], + "radiogroup_orientation_unspecified-manual.html": [ + "40ceab71ca8e10ff54095dac86ec7c90eff775d2", + [ + null, + {} + ] + ], + "radiogroup_orientation_vertical-manual.html": [ + "def4543652a0b1ec6ae83ca221347b6bdeb2bbb3", + [ + null, + {} + ] + ], + "radiogroup_readonly_false-manual.html": [ + "102f51757baf7456dfbc72fb555564d44b03327d", + [ + null, + {} + ] + ], + "radiogroup_readonly_true-manual.html": [ + "0c97e24a8bf0a76d24bcac20f92afcaec8e2ccd4", + [ + null, + {} + ] + ], + "radiogroup_readonly_unspecified-manual.html": [ + "6e8c641ac7b595cd5fc2ace06b168575a51d8c58", + [ + null, + {} + ] + ], + "region_with_name-manual.html": [ + "ba868a77b2e481787208ded2e07e12c16273c508", + [ + null, + {} + ] + ], + "region_without_name-manual.html": [ + "84ea6658e70505466602c856635dbdabb75b4c84", + [ + null, + {} + ] + ], + "row_colindex_4-manual.html": [ + "82ee257d9e51f1dd81ffe3a94a029936e1fcb16f", + [ + null, + {} + ] + ], + "row_rowindex_4-manual.html": [ + "1333219e0486c685ab1a29f91801556e8c58bcd9", + [ + null, + {} + ] + ], + "rowheader_aria-colspan_2_on_div-manual.html": [ + "3d8288895974c786dc21e7e3188da1672ca16dc1", + [ + null, + {} + ] + ], + "rowheader_aria-rowspan_2_on_div-manual.html": [ + "4ddf4f5c9acfbe6b4a46f8e2d74f7e46809e343e", + [ + null, + {} + ] + ], + "rowheader_colindex_4-manual.html": [ + "8b1eb477e47e07371b3fb2f0924ca8a74e746205", + [ + null, + {} + ] + ], + "rowheader_rowindex_4-manual.html": [ + "716403cfeb6101c9bec4839bb8812a7f07e133de", + [ + null, + {} + ] + ], + "rowheader_selected_false_not_automatically_propagated-manual.html": [ + "7cd9a559900769094c42c4986aebb5fb5da0807a", + [ + null, + {} + ] + ], + "rowheader_selected_true_not_automatically_propagated-manual.html": [ + "51b2b68fee31b0241eaa12bdaa12f4fb9fd75596", + [ + null, + {} + ] + ], + "scrollbar_all_values_unspecified-manual.html": [ + "910fe2b11812a8e6ec08ba67fc23a5ffc1acb9a3", + [ + null, + {} + ] + ], + "scrollbar_only_valuenow_unspecified-manual.html": [ + "73e315817635fe552fe7abdcd83b2c926b41a134", + [ + null, + {} + ] + ], + "scrollbar_orientation_unspecified-manual.html": [ + "32791ae1d8df74fd3045cd22a194e032aa8866cd", + [ + null, + {} + ] + ], + "searchbox-manual.html": [ + "979bd0fad45a6ddab51e9c284f72e864393f698c", + [ + null, + {} + ] + ], + "searchbox_activedescendant-manual.html": [ + "a72cf9326364bc44b4cb96f29a94b174016cb04b", + [ + null, + {} + ] + ], + "searchbox_activedescendant_value_changes-manual.html": [ + "956f931ae863ad643821c91783952502e6247a40", + [ + null, + {} + ] + ], + "searchbox_autocomplete_both-manual.html": [ + "ea8b69867946322bda7261e3b9bc8571516b8ddb", + [ + null, + {} + ] + ], + "searchbox_autocomplete_inline-manual.html": [ + "77e707666c563c42d781139244476c317bb76998", + [ + null, + {} + ] + ], + "searchbox_autocomplete_list-manual.html": [ + "0ce8068ea94cf9f34b442837d1da4cd9a2091d2f", + [ + null, + {} + ] + ], + "searchbox_autocomplete_none-manual.html": [ + "341d75c5320116135551df3f8d7b4e750b215a30", + [ + null, + {} + ] + ], + "searchbox_autocomplete_unspecified-manual.html": [ + "59becae655e94f39d9773df4a4eba1086e058929", + [ + null, + {} + ] + ], + "searchbox_multiline_false-manual.html": [ + "8f49eb61e93a4b3de4a0d19ed9f970fc7e75ba77", + [ + null, + {} + ] + ], + "searchbox_multiline_true-manual.html": [ + "47e6c3aaa97011ed2053d0ffa08b4c4ea6bcbda3", + [ + null, + {} + ] + ], + "searchbox_multiline_unspecified-manual.html": [ + "5c1d7f5185aa67b3fdc589b03d0c43401aff5f54", + [ + null, + {} + ] + ], + "searchbox_placeholder-manual.html": [ + "da513456d2de45ee7fd1d371ffb443674201f7d9", + [ + null, + {} + ] + ], + "searchbox_readonly_false-manual.html": [ + "574666a0177b890e1b27e6d60aa2c251e05ffa91", + [ + null, + {} + ] + ], + "searchbox_readonly_true-manual.html": [ + "833f1bc4288c1dba08b0e72573fa691696fdd5b1", + [ + null, + {} + ] + ], + "searchbox_readonly_unspecified-manual.html": [ + "51b9893595d4d0dc14b7c71cbf7c35d7231b226a", + [ + null, + {} + ] + ], + "searchbox_required_false-manual.html": [ + "1bfc8953564d28e199b52abc903aea537f2ce541", + [ + null, + {} + ] + ], + "searchbox_required_true-manual.html": [ + "7e26e5ab03ab4bc45d855b34ebc87ac99b0c7734", + [ + null, + {} + ] + ], + "searchbox_required_unspecified-manual.html": [ + "13489ad13a0ca80b9cda0eb911013ad561ed30fd", + [ + null, + {} + ] + ], + "separator_focusable_all_values_unspecified-manual.html": [ + "fb8e852bb17c196d33cac5475145bdd092fb3e0e", + [ + null, + {} + ] + ], + "separator_focusable_only_valuenow_unspecified-manual.html": [ + "680c2a3605a10fca3bef753b2e6dd08d32c80052", + [ + null, + {} + ] + ], + "separator_focusable_valuetext-manual.html": [ + "5992f15aeb0077ace637e577d1615ee006ce6354", + [ + null, + {} + ] + ], + "separator_orientation_unspecified-manual.html": [ + "3a3901b4244040b42fb2f6b3f63af949bbadc87f", + [ + null, + {} + ] + ], + "separator_unfocusable_all_values_unspecified-manual.html": [ + "171370f422bcbbc357e2b68c405cdac64786c4c3", + [ + null, + {} + ] + ], + "separator_unfocusable_valuetext-manual.html": [ + "db8ee6322dd1356eca5e546c8cc1c20cdfe9849a", + [ + null, + {} + ] + ], + "slider_all_values_unspecified-manual.html": [ + "0dea62e620f7a3a1d8ce21db5a31e4136557e3f1", + [ + null, + {} + ] + ], + "slider_only_valuenow_unspecified-manual.html": [ + "ffcbc783734e3708b33ebe5884d65b2f92cdee62", + [ + null, + {} + ] + ], + "slider_orientation_unspecified-manual.html": [ + "295b0a61960b92c5691c14b66e46ecaad485b8b7", + [ + null, + {} + ] + ], + "slider_readonly_false-manual.html": [ + "f5a70984d51d74c649ca3b1a308c9942efe30a6f", + [ + null, + {} + ] + ], + "slider_readonly_true-manual.html": [ + "2588079d784cfd659df39504032d2494dc481995", + [ + null, + {} + ] + ], + "slider_readonly_unspecified-manual.html": [ + "271325a47d39f3b2d2cb95a0a6b8c49a741d2aea", + [ + null, + {} + ] + ], + "spinbutton_all_values_unspecified-manual.html": [ + "8da69af36d6e8e7ac6028de683ba576d7262ec5d", + [ + null, + {} + ] + ], + "spinbutton_only_aria-valuenow_unspecified-manual.html": [ + "bbb94702fe333831ae34a10cf15aaa796efaf0b5", + [ + null, + {} + ] + ], + "spinbutton_readonly_false-manual.html": [ + "5e9429ca28a46413e56896794a4341813c75e2d4", + [ + null, + {} + ] + ], + "spinbutton_readonly_true-manual.html": [ + "a7a3abe632797531f82b09ca861e87d70f5d259a", + [ + null, + {} + ] + ], + "spinbutton_readonly_unspecified-manual.html": [ + "0976b0737c7acd5e34cd9aa719d2a9141de8f4e1", + [ + null, + {} + ] + ], + "switch_checked_false-manual.html": [ + "ac61802bdfb39a197e14e607c25cc48d895d1f35", + [ + null, + {} + ] + ], + "switch_checked_mixed-manual.html": [ + "a674c7d7bcf6dcbe4134e2fbff97d35395c19832", + [ + null, + {} + ] + ], + "switch_checked_true-manual.html": [ + "e23e7235616334f41fa0c29780e5b42051125659", + [ + null, + {} + ] + ], + "switch_checked_undefined-manual.html": [ + "4f5399e88ceb23d91a4c00d1bd1f4ac562725d18", + [ + null, + {} + ] + ], + "switch_checked_value_changes-manual.html": [ + "b58e52fefb039216c64c48a9701bd9c50f86b4c6", + [ + null, + {} + ] + ], + "switch_readonly_false-manual.html": [ + "e68b6bb0d27aef4cbfad98217151a544fa5231ba", + [ + null, + {} + ] + ], + "switch_readonly_true-manual.html": [ + "605d2d0d9afdf867c1a23c1759b9e10c05fde336", + [ + null, + {} + ] + ], + "switch_readonly_unspecified-manual.html": [ + "0fd582c0e9bace1a25474c05f55d9e8492100335", + [ + null, + {} + ] + ], + "tab_posinset_and_setsize-manual.html": [ + "f27f485ac97bf2423a72507925016f2a2cc227e2", + [ + null, + {} + ] + ], + "table_colcount_-1-manual.html": [ + "2135f6ed8d0d760ddace412faf1e490902fbf8ed", + [ + null, + {} + ] + ], + "table_colcount_8-manual.html": [ + "1b8e0affdd5dd5ff2728fc32fabca877d8a117fc", + [ + null, + {} + ] + ], + "table_rowcount_-1-manual.html": [ + "5e7b5b8bf49aa121b50e6ddacfd768026e025115", + [ + null, + {} + ] + ], + "table_rowcount_3-manual.html": [ + "5bfad69b240d6c6fd57f5a8dc554069771a9f9d4", + [ + null, + {} + ] + ], + "tablist_orientation_horizontal-manual.html": [ + "104668cbb95e044d2055f7a35f69da6adfa93b04", + [ + null, + {} + ] + ], + "tablist_orientation_unspecified-manual.html": [ + "001c2ee77b31778169f377e2be4013912e164910", + [ + null, + {} + ] + ], + "tablist_orientation_vertical-manual.html": [ + "f6fe16e8955cd5914167a943675db0bd7e399ea9", + [ + null, + {} + ] + ], + "term_role-manual.html": [ + "ac5030df950334c912f57821c9ae978c47d49efd", + [ + null, + {} + ] + ], + "textbox_placeholder-manual.html": [ + "fdf0635be67baf7d71e22a43d59cfa551b17d018", + [ + null, + {} + ] + ], + "toolbar_orientation_horizontal-manual.html": [ + "1b8fda8dd60bbab169349ce227574a9737cfbf14", + [ + null, + {} + ] + ], + "toolbar_orientation_unspecified-manual.html": [ + "4607511874bd8b16b47789b20c7a727ffc8ffd88", + [ + null, + {} + ] + ], + "toolbar_orientation_vertical-manual.html": [ + "792952d323d178819a83f237c1f25b8d02274712", + [ + null, + {} + ] + ], + "tree_orientation_horizontal-manual.html": [ + "15813f5f039a7c93581c0132e2913580dac72ea8", + [ + null, + {} + ] + ], + "tree_orientation_unspecified-manual.html": [ + "dfc1bdcc587e104444691895a2840388f1e242f7", + [ + null, + {} + ] + ], + "tree_orientation_vertical-manual.html": [ + "b9afa33ff44cd4e4c3a4646b2398e10e55069bcc", + [ + null, + {} + ] + ], + "treegrid_colcount_8-manual.html": [ + "a3e9ea14963ca5da01235724200d3df4a7f79ad1", + [ + null, + {} + ] + ], + "treegrid_orientation_horizontal-manual.html": [ + "756153abf3bc68e62e68840393645b823f320741", + [ + null, + {} + ] + ], + "treegrid_orientation_unspecified-manual.html": [ + "d536e9afbed7c6d83185c4416cbe424a4bf27941", + [ + null, + {} + ] + ], + "treegrid_orientation_vertical-manual.html": [ + "62a19d09046691bbcccd81922d29efbe5b92c4bd", + [ + null, + {} + ] + ], + "treegrid_rowcount_3-manual.html": [ + "9d9b8acf44700de3166430c34e3b751ce6d8f177", + [ + null, + {} + ] + ], + "treeitem_selected_false-manual.html": [ + "684fda69b6d157bef02d1ef60a9ce9cc602d0f82", + [ + null, + {} + ] + ], + "treeitem_selected_true-manual.html": [ + "b951c54dec674ac8d7e9a537cf8a064f6b4d0d97", + [ + null, + {} + ] + ], + "treeitem_selected_undefined-manual.html": [ + "dddfd3826f094c6557f939734819ea437497aaa0", + [ + null, + {} + ] + ], + "treeitem_selected_value_changes-manual.html": [ + "69734c82ddaa1455b7473c84b27fac49c8cf1c82", + [ + null, + {} + ] + ] + } }, "web-nfc": { "NDEFReader-make-read-only-document-hidden-manual.https.html": [ @@ -28602,149 +28662,6 @@ {} ] ], - "fixedpos-001-print.html": [ - "04feb96e8474bb638254bc0babc22fa378178f48", - [ - null, - [ - [ - "/css/css-break/fixedpos-001-print-ref.html", - "==" - ] - ], - {} - ] - ], - "fixedpos-002-print.html": [ - "c23c6be7d2a3bd2416b7c2765cd7654869918d54", - [ - null, - [ - [ - "/css/css-break/fixedpos-002-print-ref.html", - "==" - ] - ], - {} - ] - ], - "fixedpos-003-print.html": [ - "1b06257175fe3bc93a9205bbaa4c6ee38a778e9f", - [ - null, - [ - [ - "/css/css-break/fixedpos-003-print-ref.html", - "==" - ] - ], - {} - ] - ], - "fixedpos-004-print.html": [ - "c138e9cd6aa591657f65cd80859a8e9e4f33e132", - [ - null, - [ - [ - "/css/css-break/fixedpos-004-print-ref.html", - "==" - ] - ], - {} - ] - ], - "fixedpos-005-print.html": [ - "0a2edc71788aaa76305f1d17951e5499418709bd", - [ - null, - [ - [ - "/css/css-break/fixedpos-005-print-ref.html", - "==" - ] - ], - {} - ] - ], - "fixedpos-006-print.html": [ - "2386c166c81363a904c3e11dfac7dec4e0241029", - [ - null, - [ - [ - "/css/css-break/fixedpos-006-print-ref.html", - "==" - ] - ], - {} - ] - ], - "fixedpos-007-print.html": [ - "8dcb700b96d89c508f9e6696292c79a382a472a2", - [ - null, - [ - [ - "/css/css-break/fixedpos-007-print-ref.html", - "==" - ] - ], - {} - ] - ], - "fixedpos-008-print.html": [ - "02b5d63cc7cd500e8dafa2d7a7e966d2dc90c521", - [ - null, - [ - [ - "/css/css-break/fixedpos-008-print-ref.html", - "==" - ] - ], - {} - ] - ], - "fixedpos-with-abspos-with-link-print.html": [ - "057ddc91460264bbef9bb36fa7be8d89f6d6458e", - [ - null, - [ - [ - "/css/css-break/fixedpos-with-abspos-with-link-print-ref.html", - "==" - ] - ], - {} - ] - ], - "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", - [ - null, - [ - [ - "/css/css-break/fixedpos-with-link-with-inline-child-print-ref.html", - "==" - ] - ], - {} - ] - ], "flexbox": { "multi-line-row-flex-fragmentation-063-print.html": [ "1225792abac5a223be7c98cb298e979c1ceda3d7", @@ -28864,19 +28781,6 @@ {} ] ], - "page-name-001-print.html": [ - "56281bb4ed5f8b3e34401420b10504ed6c0e00fd", - [ - null, - [ - [ - "/css/css-break/page-name-001-print-ref.html", - "==" - ] - ], - {} - ] - ], "table": { "repeated-section": { "fixedpos-in-footer-forced-break-print.html": [ @@ -29184,6 +29088,149 @@ {} ] ], + "fixedpos-001-print.html": [ + "04feb96e8474bb638254bc0babc22fa378178f48", + [ + null, + [ + [ + "/css/printing/fixedpos-001-print-ref.html", + "==" + ] + ], + {} + ] + ], + "fixedpos-002-print.html": [ + "c23c6be7d2a3bd2416b7c2765cd7654869918d54", + [ + null, + [ + [ + "/css/printing/fixedpos-002-print-ref.html", + "==" + ] + ], + {} + ] + ], + "fixedpos-003-print.html": [ + "1b06257175fe3bc93a9205bbaa4c6ee38a778e9f", + [ + null, + [ + [ + "/css/printing/fixedpos-003-print-ref.html", + "==" + ] + ], + {} + ] + ], + "fixedpos-004-print.html": [ + "c138e9cd6aa591657f65cd80859a8e9e4f33e132", + [ + null, + [ + [ + "/css/printing/fixedpos-004-print-ref.html", + "==" + ] + ], + {} + ] + ], + "fixedpos-005-print.html": [ + "0a2edc71788aaa76305f1d17951e5499418709bd", + [ + null, + [ + [ + "/css/printing/fixedpos-005-print-ref.html", + "==" + ] + ], + {} + ] + ], + "fixedpos-006-print.html": [ + "2386c166c81363a904c3e11dfac7dec4e0241029", + [ + null, + [ + [ + "/css/printing/fixedpos-006-print-ref.html", + "==" + ] + ], + {} + ] + ], + "fixedpos-007-print.html": [ + "8dcb700b96d89c508f9e6696292c79a382a472a2", + [ + null, + [ + [ + "/css/printing/fixedpos-007-print-ref.html", + "==" + ] + ], + {} + ] + ], + "fixedpos-008-print.html": [ + "02b5d63cc7cd500e8dafa2d7a7e966d2dc90c521", + [ + null, + [ + [ + "/css/printing/fixedpos-008-print-ref.html", + "==" + ] + ], + {} + ] + ], + "fixedpos-with-abspos-with-link-print.html": [ + "057ddc91460264bbef9bb36fa7be8d89f6d6458e", + [ + null, + [ + [ + "/css/printing/fixedpos-with-abspos-with-link-print-ref.html", + "==" + ] + ], + {} + ] + ], + "fixedpos-with-iframe-print.html": [ + "5102d045c4202e4bc22c6c876fd3bbbcf620c4b0", + [ + null, + [ + [ + "/css/printing/fixedpos-with-iframe-print-ref.html", + "==" + ] + ], + {} + ] + ], + "fixedpos-with-link-with-inline-child-print.html": [ + "694e5376cbfab7ee52c1f27b9bf0fd23a2a91375", + [ + null, + [ + [ + "/css/printing/fixedpos-with-link-with-inline-child-print-ref.html", + "==" + ] + ], + {} + ] + ], "fragmented-inline-block-001-print.html": [ "848635431ecfc5ae3835cdc1f8398b1c04c95ed9", [ @@ -29231,6 +29278,19 @@ {} ] ], + "page-name-001-print.html": [ + "56281bb4ed5f8b3e34401420b10504ed6c0e00fd", + [ + null, + [ + [ + "/css/printing/page-name-001-print-ref.html", + "==" + ] + ], + {} + ] + ], "page-overflow-crash-print.html": [ "e295c569d2d634867bab43741baf23c905918fc3", [ @@ -129089,6 +129149,19 @@ {} ] ], + "background-clip-padding-box-with-border-radius.html": [ + "8595caec7bb2d751dd87aebc777be84de6233af7", + [ + null, + [ + [ + "/css/css-backgrounds/reference/background-clip-padding-box-with-border-radius-ref.html", + "==" + ] + ], + {} + ] + ], "background-clip_padding-box.html": [ "354cbba90759471f886961d3b0e1a5202618d577", [ @@ -136330,19 +136403,6 @@ {} ] ], - "simple-bg-color.html": [ - "07bea44d21964b832cd9e4b4f32098ec41a2c206", - [ - null, - [ - [ - "/css/css-backgrounds/simple-bg-color-ref.html", - "==" - ] - ], - {} - ] - ], "subpixel-repeat-no-repeat-mix.html": [ "1828b974877c2dc780388f044126d0499cc5f9fb", [ @@ -138289,6 +138349,19 @@ {} ] ], + "flex-item-content-overflow-003.html": [ + "d3a5b976ccd3fa0dc972b7b61b4a37ba9365e442", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "increase-fragmentainer-size-flex-item-trailing-margin.html": [ "94845449fbf185b2004cc532ecb401eab4e4221d", [ @@ -142359,6 +142432,19 @@ ], {} ] + ], + "grid-item-overflow-001.html": [ + "30d6f3bb21ca1e144c960fffb3cf657dc79cef64", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] ] }, "increase-fragmentainer-size-tall-border.html": [ @@ -214744,6 +214830,32 @@ {} ] ], + "first-line-inherited-no-transition.html": [ + "e5253daa63fc7cb074901dd086864e27426cd152", + [ + null, + [ + [ + "/css/css-pseudo/first-line-inherited-no-transition-ref.html", + "==" + ] + ], + {} + ] + ], + "first-line-inherited-with-transition.html": [ + "88b1f34362279e156559e49d6d22f9ca48f5237f", + [ + null, + [ + [ + "/css/css-pseudo/first-line-inherited-with-transition-ref.html", + "==" + ] + ], + {} + ] + ], "first-line-line-height-001.html": [ "f1dd69807ed866374539a4416d0102f043bec5e1", [ @@ -241953,6 +242065,19 @@ {} ] ], + "text-wrap-balance-line-clamp-001.html": [ + "292e655464b750a3c0426fb6c63df8ebdbac5ffe", + [ + null, + [ + [ + "/css/css-text/white-space/reference/text-wrap-balance-line-clamp-001-ref.html", + "==" + ] + ], + {} + ] + ], "textarea-break-spaces-001.html": [ "ad81e99768f9816c6e8a659c13aed81c4f22d940", [ @@ -276528,7 +276653,7 @@ }, "css-view-transitions": { "3d-transform-incoming.html": [ - "e1c172263b7824911d205646f14c93fe97cd78b0", + "b3726d4cd5131f413219d8dcc10ce3e5cce28f61", [ null, [ @@ -276561,7 +276686,7 @@ ] ], "3d-transform-outgoing.html": [ - "1796284c06d0de95538a7b8b923b505fb9218571", + "746b93afd40c1c1e33f8ca3b4a8e0fa2970e635c", [ null, [ @@ -276640,7 +276765,7 @@ ] ], "content-visibility-auto-shared-element.html": [ - "d76eab2fcd67372c3df2558748035929b3a5ed4f", + "11b4957fbcca7d1ceb8b151741eba1b86cb5708e", [ null, [ @@ -276798,7 +276923,7 @@ ] ], "css-tags-paint-order-with-entry.html": [ - "efd1aff5df79b2e8ee6a775bd987876483f3464c", + "703b64f5c68c732d42d5ffeb1bb590f3c8ebf543", [ null, [ @@ -276831,7 +276956,7 @@ ] ], "css-tags-paint-order.html": [ - "28a955bad66c21adfd8f7ec938cb9fc2ff9a62b9", + "c0e8769b473052d3adc8f192d454f5bb59c10647", [ null, [ @@ -276844,7 +276969,7 @@ ] ], "css-tags-shared-element.html": [ - "9046b915b4f03fba81c58e44ad3d61c4236d468a", + "33bbae70fc6b918d12a17c856a3c75c1c0071ff7", [ null, [ @@ -276929,7 +277054,7 @@ ] ], "far-away-capture.html": [ - "7b003cbb76961d9747448949eaf9001cc218b4f3", + "bfe0b9fb9484f5984fbea9460d40818a40ab6ddd", [ null, [ @@ -277017,7 +277142,7 @@ ] ], "hit-test-unrelated-element.html": [ - "dae232b74defa675ca211b3b843a990a3b5ca0c7", + "1b8868280b2a82dbf8d5d4506372c925d642e159", [ null, [ @@ -277143,7 +277268,7 @@ ] ], "japanese-tag.html": [ - "67115a6fae6a8b63db7a7264efe921e056f5c7cb", + "976dcab4fca8f8cf17fbdedbf7af0a162036eb37", [ null, [ @@ -277182,7 +277307,7 @@ ] ], "new-and-old-sizes-match.html": [ - "1549a402af0cfb1fb18e8e8e7d76a71035577ad9", + "78efa9d82fa7591f62d855b2fe8ab80c4140f0fe", [ null, [ @@ -277215,7 +277340,7 @@ ] ], "new-content-captures-clip-path.html": [ - "0d4c94e47d61790b77be1805a128ae93cae1ceb8", + "4a2dfc78c2746c02ca7aae34685292fbc76aed47", [ null, [ @@ -277248,7 +277373,7 @@ ] ], "new-content-captures-different-size.html": [ - "a3ecddaf26c6d4be142525da40caaf947827684d", + "a891dec55532d6a740a459772f65acb39136cd9b", [ null, [ @@ -277282,7 +277407,7 @@ ] ], "new-content-captures-opacity.html": [ - "7f23f9110a915dff94ce768a6e69c73ceb6df5d4", + "ab4efd1f42478c2fb1c78b224a564623b3197046", [ null, [ @@ -277295,7 +277420,7 @@ ] ], "new-content-captures-positioned-spans.html": [ - "39bbfbfb123f70f3282a8ce09a69fb4892e87dc8", + "b88654cd379c92316e6eee6ed6e27ba0c80038fb", [ null, [ @@ -277321,7 +277446,7 @@ ] ], "new-content-captures-spans.html": [ - "661d7c8a01ad9f0c655ba48db7a893ead5da1b4c", + "843f6752d76740550f8348ed3cd3c9134700aa77", [ null, [ @@ -277334,7 +277459,7 @@ ] ], "new-content-container-writing-modes.html": [ - "7b55a0f012fb772fc26c85ea5568553511a82855", + "e7ac768e17d6104d0f70cab29a891c8b08b03c8c", [ null, [ @@ -277347,7 +277472,7 @@ ] ], "new-content-element-writing-modes.html": [ - "78ce545b74ad5df5c8cdb3b4d44e1b77808e9b81", + "d7740d78f54f52766c58adfcd618d1e260bdba42", [ null, [ @@ -277407,7 +277532,7 @@ ] ], "new-content-intrinsic-aspect-ratio.html": [ - "69e8f82e9f1b2c3e0b9fc710260585863e081b9a", + "53ec94122f06998a01c3b69b47d5c312e15e21d0", [ null, [ @@ -277420,7 +277545,7 @@ ] ], "new-content-is-empty-div.html": [ - "53f3e23b686f90fff4582c05b113e713010b6a21", + "bacc63f1945835678628f59c229540e990e6e30e", [ null, [ @@ -277433,7 +277558,7 @@ ] ], "new-content-is-inline.html": [ - "d971ec4eaa618cd4313a9e9ce4b269a1dad6ee13", + "c341444f3425de43a7bc47f2a718a36337398141", [ null, [ @@ -277466,7 +277591,7 @@ ] ], "new-content-object-fit-fill.html": [ - "2a34348c12a6f0df60672f003d5a77fa36fc9564", + "b891eee16d5e93258f8bf8df0ce80b5bdb9b2d6e", [ null, [ @@ -277499,7 +277624,7 @@ ] ], "new-content-object-fit-none.html": [ - "0ec9d0bc8a4f77ec8e9e08f02b0dffc1f1a279e9", + "d4b81b1a0eeadb38f13b7ae00a4d694d90e43568", [ null, [ @@ -277512,7 +277637,7 @@ ] ], "new-content-object-view-box-clip-path-reference.html": [ - "a8507f5f33e98dcb45c2670c88b918682bb3c23b", + "01a3ed3204fb418947a1d89f237ef918327a394e", [ null, [ @@ -277525,7 +277650,7 @@ ] ], "new-content-object-view-box-clip-path.html": [ - "d6a3f925cbf55d600aecd087b8b8bd460a1ef3b3", + "dcd5fec70a1c539c65dbd665d13442f0a4725966", [ null, [ @@ -277538,7 +277663,7 @@ ] ], "new-content-object-view-box-overflow-clipped.html": [ - "247a33d15bc7fb14a74f41027a8b93531f24e64e", + "593901529f43b2daa0b02e1e1eb9c9ff0e05d2fd", [ null, [ @@ -277551,7 +277676,7 @@ ] ], "new-content-object-view-box-overflow.html": [ - "d0c129a1abfe6410d3a1481b4afcf85828721602", + "2bbea1e1c4c54d5e5e6281de8f14ccc4bae8aad1", [ null, [ @@ -277564,7 +277689,7 @@ ] ], "new-content-scaling.html": [ - "5ce6d5ba693b4c493d2481b07ba3d34851389570", + "4ea3c2e04a486b74c8c92b2ca473ad9f2a2bfe44", [ null, [ @@ -277597,7 +277722,7 @@ ] ], "new-content-with-overflow-zoomed.html": [ - "fef9b26b2c2611ecd873e2315174791362d1d665", + "59170ebf00349710d34c8f5fd2966352b1d23594", [ null, [ @@ -277610,7 +277735,7 @@ ] ], "new-content-with-overflow.html": [ - "d2c802dbf53f0769963098f7ae9ddd0c3d971aa9", + "e2dc045089b024fce27e8a1ce1facacbab5ef2aa", [ null, [ @@ -277623,7 +277748,7 @@ ] ], "new-element-on-start.html": [ - "f0a8c144a98e92071f4da0435bbe61f16f9f5e6f", + "e3ec5463bfd3797b18831063253324fdc8fd52c7", [ null, [ @@ -277722,7 +277847,7 @@ ] ], "old-content-captures-clip-path.html": [ - "0734edd56fd19f49ac720da21652043174a0cfa5", + "a2faa7f1575af4c6ac3f65b3fb303f6dbab875d3", [ null, [ @@ -277735,7 +277860,7 @@ ] ], "old-content-captures-different-size.html": [ - "547cc4d7ba2eda41c9a3436206c4dbb580c65a04", + "a8d375f06463eef00ea8bf0d509e0137658c2a88", [ null, [ @@ -277769,7 +277894,7 @@ ] ], "old-content-captures-opacity.html": [ - "0b727f7972fa813f5e560a7805434e7693db34e9", + "ee3e3e4cde132895f9e1b4f2a1ca5dcd02710d3d", [ null, [ @@ -277835,7 +277960,7 @@ ] ], "old-content-container-writing-modes.html": [ - "383585335d65bf0312625362c65d8bf41fe6e5e7", + "9896c27152746f9598666455d1ffa133026ec1b0", [ null, [ @@ -277848,7 +277973,7 @@ ] ], "old-content-element-writing-modes.html": [ - "b6903d10e61c16e981a0bad5e322d182bdc2cdb2", + "5029c6aaaa362e47033389005ba050993100cfeb", [ null, [ @@ -277895,7 +278020,7 @@ ] ], "old-content-intrinsic-aspect-ratio.html": [ - "d166f438f4dae41757bd3f23e269b9fc3c1b411a", + "b46a77821781f857a5fc4742056b296092b1f113", [ null, [ @@ -277908,7 +278033,7 @@ ] ], "old-content-is-empty-div.html": [ - "54c56994d8cdafc2d8ee7612af16f1938b3f2ec6", + "137060c1ddb7ad88da61593238b1b4178f158966", [ null, [ @@ -277921,7 +278046,7 @@ ] ], "old-content-is-inline.html": [ - "9da15266bae3e2a07cd456814024127d7e94053e", + "9f350237adcb1ea234c98f9374c8e357a14e6e78", [ null, [ @@ -277954,7 +278079,7 @@ ] ], "old-content-object-fit-fill.html": [ - "fb7549cc4088fbc83e79eefbc8d6971f40014512", + "9ad8b14843fbb059229234fb8970f87e5a83ee48", [ null, [ @@ -277987,7 +278112,7 @@ ] ], "old-content-object-fit-none.html": [ - "06472302b9e6369303d6c742577fd8770dc2520c", + "1275aece7cae48d02e6fc403af743337d8d20d94", [ null, [ @@ -278000,7 +278125,7 @@ ] ], "old-content-object-view-box-clip-path-reference.html": [ - "ac566029a0feca1b5b5149ec14139a4785d1f09d", + "14a1ee83d9271555f3d85b5e4a73feeb2cf532b2", [ null, [ @@ -278033,7 +278158,7 @@ ] ], "old-content-object-view-box-clip-path.html": [ - "73100d052814a1f935610cd14952ab27fe527d26", + "dff57c68f6b5f5f6cfa807df9d280d499605fc45", [ null, [ @@ -278066,7 +278191,7 @@ ] ], "old-content-object-view-box-overflow.html": [ - "7a1ef2d0052192f151aa5163f382d3ae1c6b93ea", + "ff9bb4e7d2be4eb7194b3bbe9730210e105fd089", [ null, [ @@ -278079,7 +278204,7 @@ ] ], "old-content-with-overflow-zoomed.html": [ - "887bf7c64823d644603f3e319e046259c4b7e21b", + "10257b761fa639410849e8982e317b38baa0161c", [ null, [ @@ -278092,7 +278217,7 @@ ] ], "old-content-with-overflow.html": [ - "7a40c8e386aea92c3129568c109f23be3c15d007", + "6ed31d375c6f83f90253e7d4b324d81cb56f87f2", [ null, [ @@ -278164,7 +278289,7 @@ ] ], "root-style-change-during-animation.html": [ - "1453e5019d7de6176a7967056e14703e01f292e3", + "d1d291124bd6dfa57b36e24072a1be830940753f", [ null, [ @@ -278374,7 +278499,7 @@ ] ], "set-universal-specificity.html": [ - "1e8b7d0eb868b2aa6e9226d4073130a9c565f62c", + "ec50b1e4078589752dcc9f887a39f877cd443a40", [ null, [ @@ -298266,7 +298391,7 @@ ] ], "nth-child-in-shadow-root.html": [ - "740b68f2003848e9f3447ac48e373091691f29a3", + "443a12d229f793c201248583934fa3c05d7f81af", [ null, [ @@ -298396,7 +298521,7 @@ ] ], "nth-last-child-in-shadow-root.html": [ - "766bac0fa385ae97d1c57633a7376b2ca5c066b1", + "890abfe99720b056f068a52e76e7b1580189ffb2", [ null, [ @@ -322102,8 +322227,16 @@ "201dff83ce9cacbd3f61f6a0b16eeb3105fa9ab2", [] ], + "aes_gcm_256_iv_fixtures.js": [ + "9cdbbbb79075c0a90d4a55caf18157fe485a5609", + [] + ], + "aes_gcm_96_iv_fixtures.js": [ + "bb00e2d7dd92cbd780d48273e065e95d5c38e181", + [] + ], "aes_gcm_vectors.js": [ - "bc406f8f0ef78e0759f1dd5b4a48892ce43fcde4", + "965fe9564d461925df00ffc465f161e03436f817", [] ], "rsa.js": [ @@ -322137,7 +322270,7 @@ [] ], "ecdsa_vectors.js": [ - "2d1fb6d5c9e80bbc1b4ece377a4743f7ed371bb7", + "aa9b81ba8a4bd11a5a27adab005aaf5727be18d1", [] ], "eddsa.js": [ @@ -325056,7 +325189,7 @@ "critical-ch": { "resources": { "echo-critical-hint.py": [ - "e4e77ad2a9a3bc9af2b76b6471f275db936bce4d", + "0913dbb19db57c3cacada72547dbe55d2a8e1688", [] ], "util.js": [ @@ -325174,6 +325307,22 @@ "83a6a05e547f39947f21da53de7a3bbc137101d1", [] ], + "accept-ch-mixed.html": [ + "bf604dffeefe14c07ea327ed4887ef9a69d94d9b", + [] + ], + "accept-ch-mixed.html.headers": [ + "39d4e1935da486146c515d132434eff241622c61", + [] + ], + "accept-ch-split.html": [ + "5038b9401398c5f8cd2d0ac247ea447551439c9d", + [] + ], + "accept-ch-split.html.headers": [ + "261e1e8ee6d204afdce3cf5013c51b70a0887163", + [] + ], "accept-ch.html": [ "1f1da26cebe45d3e55fe4aea8af6cefcae94adb5", [] @@ -366475,6 +366624,10 @@ "dc6d9a00d53495e17f21adc8915176dd8c681e1e", [] ], + "background-clip-padding-box-with-border-radius-ref.html": [ + "545b80d35163b43e136d21f7584082b3b9401b38", + [] + ], "background-color-clip.html": [ "18e80a92586f241dbbe9d2a73991d78c98141071", [] @@ -366874,10 +367027,6 @@ [] ] }, - "simple-bg-color-ref.html": [ - "d8003b58e3ac1c5e917500a59b60c0d2e56287a3", - [] - ], "support": { "100x100-blue-and-orange.png": [ "70437d7bda2b56a921b523d4a81ca4df7be4321d", @@ -367506,50 +367655,6 @@ "5c96f31a6ba193f6d86c7a66267581edd65260d2", [] ], - "fixedpos-001-print-ref.html": [ - "3d66305db0e7497f76dd6aa5a42217eb0931a87a", - [] - ], - "fixedpos-002-print-ref.html": [ - "3d66305db0e7497f76dd6aa5a42217eb0931a87a", - [] - ], - "fixedpos-003-print-ref.html": [ - "3d66305db0e7497f76dd6aa5a42217eb0931a87a", - [] - ], - "fixedpos-004-print-ref.html": [ - "3e3473bcb8e41ce1c4ac6aaf0006b25622b24bc3", - [] - ], - "fixedpos-005-print-ref.html": [ - "e692ff8db3764e05601348acfc2d4ce8314f41b5", - [] - ], - "fixedpos-006-print-ref.html": [ - "b03e1d78d003f33d1ad7810bcacf9cf407b95acb", - [] - ], - "fixedpos-007-print-ref.html": [ - "f576c9377153c3e48ce58d8fcd5428da0d705b23", - [] - ], - "fixedpos-008-print-ref.html": [ - "6ed2528115ae3a5634df6a2968a71fcd81424471", - [] - ], - "fixedpos-with-abspos-with-link-print-ref.html": [ - "000c05350b54885c47ea74a7336e02ed857d55ea", - [] - ], - "fixedpos-with-iframe-print-ref.html": [ - "5c1714045083dfc22272b0522273e7a7235cde6f", - [] - ], - "fixedpos-with-link-with-inline-child-print-ref.html": [ - "f12d31acd9d077a24a4ba47bcdbb5b2a3029faf3", - [] - ], "flexbox": { "flex-fragmented-with-float-descendant-001-ref.html": [ "ead53ad704a08d06a2e88ed5e43b9bcaf55aa584", @@ -367676,10 +367781,6 @@ "cf345b59638f28ddf423ed343a269178ab47f1b9", [] ], - "page-name-001-print-ref.html": [ - "69c5c37b5a3cc4ed47fab1f8105e5f2351e2d07b", - [] - ], "reference": { "widows-001-ref.html": [ "4f822f8fd67aed18355177a5e9de18d8a63f895e", @@ -387154,6 +387255,14 @@ "99e9c334bf2c856535c7643911a3050390658a6f", [] ], + "first-line-inherited-no-transition-ref.html": [ + "1955beef3006e11c442f8e23f2e6f8b94976c874", + [] + ], + "first-line-inherited-with-transition-ref.html": [ + "b28c17436a67030b1e7edf9fce17475e7c88d8f2", + [] + ], "first-line-line-height-001-ref.html": [ "13e9b20f34d44cbe436b6bbcbdd6e85884ee71ca", [] @@ -393012,6 +393121,10 @@ "43202e4d97f03c1694176f5c6a95b4a48e938a96", [] ], + "text-wrap-balance-line-clamp-001-ref.html": [ + "4e465be7ccf97dfe4e8523f92aa6aec4470acbe2", + [] + ], "textarea-pre-wrap-001-ref.html": [ "31070ea92815e4d3a3ece48ed69da03de02f671e", [] @@ -398117,7 +398230,7 @@ [] ], "new-and-old-sizes-match-ref.html": [ - "ca597dfbb84be1a473c3d31747a97c7273d5d5b1", + "b8c3b34c03a693c9f1e71a040a2176dd8dc5413d", [] ], "new-content-captures-clip-path-ref.html": [ @@ -402292,6 +402405,50 @@ "305aa2fce2f490ef161c803558cc7a17bf7aa117", [] ], + "fixedpos-001-print-ref.html": [ + "3d66305db0e7497f76dd6aa5a42217eb0931a87a", + [] + ], + "fixedpos-002-print-ref.html": [ + "3d66305db0e7497f76dd6aa5a42217eb0931a87a", + [] + ], + "fixedpos-003-print-ref.html": [ + "3d66305db0e7497f76dd6aa5a42217eb0931a87a", + [] + ], + "fixedpos-004-print-ref.html": [ + "3e3473bcb8e41ce1c4ac6aaf0006b25622b24bc3", + [] + ], + "fixedpos-005-print-ref.html": [ + "e692ff8db3764e05601348acfc2d4ce8314f41b5", + [] + ], + "fixedpos-006-print-ref.html": [ + "b03e1d78d003f33d1ad7810bcacf9cf407b95acb", + [] + ], + "fixedpos-007-print-ref.html": [ + "f576c9377153c3e48ce58d8fcd5428da0d705b23", + [] + ], + "fixedpos-008-print-ref.html": [ + "6ed2528115ae3a5634df6a2968a71fcd81424471", + [] + ], + "fixedpos-with-abspos-with-link-print-ref.html": [ + "000c05350b54885c47ea74a7336e02ed857d55ea", + [] + ], + "fixedpos-with-iframe-print-ref.html": [ + "5c1714045083dfc22272b0522273e7a7235cde6f", + [] + ], + "fixedpos-with-link-with-inline-child-print-ref.html": [ + "f12d31acd9d077a24a4ba47bcdbb5b2a3029faf3", + [] + ], "fragmented-inline-block-002-print-ref.html": [ "dcfa3a1385628a90cb2d1be17e8bf6da09cde20e", [] @@ -402300,6 +402457,10 @@ "fb5255eddb1cdbdc1b9b610a7813b977d822b7b9", [] ], + "page-name-001-print-ref.html": [ + "69c5c37b5a3cc4ed47fab1f8105e5f2351e2d07b", + [] + ], "paused-animations-print-ref.html": [ "c22ecd174585100fd5faae8402f5a6e141b8264e", [] @@ -403761,7 +403922,7 @@ [] ], "making-a-testing-plan.md": [ - "eb96f31202e21fa2509781fead227931075c5e97", + "a4007039ae4aa47ee2f06df784b34b48e8678214", [] ], "manual.md": [ @@ -407417,6 +407578,86 @@ ] } }, + "local-network-access": { + "META.yml": [ + "944ce6f14a1204f048e00db3b7ea21da93037709", + [] + ], + "README.md": [ + "8995e3d7ef6ba5b7286c334842bd0b77426882a1", + [] + ], + "resources": { + "executor.html": [ + "d71212951cb63ebd310820d1df7c8789b5fbd316", + [] + ], + "fetcher.html": [ + "000a5cc25bb72b334d41ff05e7b8f22691f48f30", + [] + ], + "fetcher.js": [ + "3a1859876d406cebe9a2bbc63952d019ddc5ed06", + [] + ], + "iframed.html": [ + "c889c2882a45030fb1257db6be812a722475c9f3", + [] + ], + "iframer.html": [ + "304cc54ae4448b84bf43aad3279b2dd198add165", + [] + ], + "preflight.py": [ + "4b0bfefd4d6356fad7bf0460a67da4b13fb4930e", + [] + ], + "service-worker-bridge.html": [ + "816de535feaa83c224e76159d3defa571b1199fe", + [] + ], + "service-worker.js": [ + "bca71ad910cb189c2de6298b4ea59b5594aba637", + [] + ], + "shared-fetcher.js": [ + "30bde1e0542d144f9b5b0e47824802df13556ee2", + [] + ], + "shared-worker-blob-fetcher.html": [ + "a79869b2f96249969d44e5f18341fa1cbd094f4d", + [] + ], + "shared-worker-fetcher.html": [ + "4af4b1f23959e00c50d48a926f24d97edb8edb90", + [] + ], + "socket-opener.html": [ + "48d27216bedf9aa1daf4d2a4e96f860e9315a0c3", + [] + ], + "support.sub.js": [ + "c07fd2c2acee68967c57826fd093abb013b05761", + [] + ], + "worker-blob-fetcher.html": [ + "5a50271e11b57d808b01a5849b1bee7d3dbeba28", + [] + ], + "worker-fetcher.html": [ + "bd155a532bd2d9dd2b5f96383cb8bde27a289856", + [] + ], + "worker-fetcher.js": [ + "aab49afe6f47c752884d407cfa48ef38e3b4a847", + [] + ], + "xhr-sender.html": [ + "b131fa41f9a8bf14c5c0a1aac8fcc2593bec6c42", + [] + ] + } + }, "metadata": { "META.yml": [ "85f0a7d2ee12616aa7a5698b346954829d8a8bb0", @@ -407775,86 +408016,6 @@ ] } }, - "private-network-access": { - "META.yml": [ - "944ce6f14a1204f048e00db3b7ea21da93037709", - [] - ], - "README.md": [ - "a69aab487239021088f944b0a8cee2dad4b3d111", - [] - ], - "resources": { - "executor.html": [ - "d71212951cb63ebd310820d1df7c8789b5fbd316", - [] - ], - "fetcher.html": [ - "000a5cc25bb72b334d41ff05e7b8f22691f48f30", - [] - ], - "fetcher.js": [ - "3a1859876d406cebe9a2bbc63952d019ddc5ed06", - [] - ], - "iframed.html": [ - "c889c2882a45030fb1257db6be812a722475c9f3", - [] - ], - "iframer.html": [ - "304cc54ae4448b84bf43aad3279b2dd198add165", - [] - ], - "preflight.py": [ - "4b0bfefd4d6356fad7bf0460a67da4b13fb4930e", - [] - ], - "service-worker-bridge.html": [ - "816de535feaa83c224e76159d3defa571b1199fe", - [] - ], - "service-worker.js": [ - "bca71ad910cb189c2de6298b4ea59b5594aba637", - [] - ], - "shared-fetcher.js": [ - "30bde1e0542d144f9b5b0e47824802df13556ee2", - [] - ], - "shared-worker-blob-fetcher.html": [ - "a79869b2f96249969d44e5f18341fa1cbd094f4d", - [] - ], - "shared-worker-fetcher.html": [ - "4af4b1f23959e00c50d48a926f24d97edb8edb90", - [] - ], - "socket-opener.html": [ - "48d27216bedf9aa1daf4d2a4e96f860e9315a0c3", - [] - ], - "support.sub.js": [ - "210184ec4b654e6529adb70d47d058945e5bc298", - [] - ], - "worker-blob-fetcher.html": [ - "5a50271e11b57d808b01a5849b1bee7d3dbeba28", - [] - ], - "worker-fetcher.html": [ - "bd155a532bd2d9dd2b5f96383cb8bde27a289856", - [] - ], - "worker-fetcher.js": [ - "aab49afe6f47c752884d407cfa48ef38e3b4a847", - [] - ], - "xhr-sender.html": [ - "b131fa41f9a8bf14c5c0a1aac8fcc2593bec6c42", - [] - ] - } - }, "range": { "resources": { "basic.html": [ @@ -413182,10 +413343,6 @@ "the-canvas-state.yaml": [ "045208615436efec1596a2f14cb62f02fa8e470a", [] - ], - "transformations.yaml": [ - "876c48f849cb1e111a0a1ead7a17945f443723eb", - [] ] }, "offscreen": { @@ -413216,10 +413373,6 @@ "the-offscreen-canvas.yaml": [ "0bef18bf9d56acccb5a747a791bc038c61857f48", [] - ], - "transformations.yaml": [ - "efc00222bfc70ae08b1d03e2628ea87c76f15f48", - [] ] } }, @@ -413268,6 +413421,10 @@ "dd088aa396f47e70a6e66b0b9c7d8ffca0fa0e1e", [] ], + "transformations.yaml": [ + "0d2265be7aa0c94ccbddc41f4051dbf082bfc186", + [] + ], "video.yaml": [ "f9b48fb8daa2a247e9e22a18b5e891be3351bda9", [] @@ -421183,7 +421340,7 @@ [] ], "popover-utils.js": [ - "9c6ba77549bd76f6bc4f05794547574d95d36224", + "7eb9e6327a285bbb880ae53c5e92c60b746cc7c0", [] ] } @@ -424651,6 +424808,10 @@ "2ff648a04905f9090df637f2140c1c092cc3a247", [] ], + "cicp.png": [ + "8fa0ce2123c4f876a71b1ca80e04931614f3b87f", + [] + ], "clear-100x50.png": [ "eeedd0ff05889ffd4468bf19a2e8e9e0a094201c", [] @@ -424801,6 +424962,10 @@ "55f8e69325bc61ff83f769a6524f7f9c3310be1f", [] ], + "trns.png": [ + "4e309a89a8a27a9f7afb6eee6a4a604a3ef7c249", + [] + ], "undecodable.png": [ "f2581017b43d44664e7137a78c0803554b50f3b1", [] @@ -427025,7 +427190,7 @@ ] }, "lint.ignore": [ - "3b6106fbfc3f8dff9e2f6fb2d6caf05753bdc8bb", + "743986b66eed4d84d10a52b2c47c43ffbf95e53f", [] ], "loading": { @@ -427275,8 +427440,12 @@ ], "tentative": { "resources": { + "busy.js": [ + "9d761b6de5ee65c9067a4c576c90eb9e7dd6ef05", + [] + ], "utils.js": [ - "47c138b1e62ebfbe9287e903e4e7be438674dc34", + "3a121a5a9b571238a548b2f246e3ae1327c4d5a5", [] ] } @@ -427305,7 +427474,7 @@ [] ], "utils.js": [ - "36bd6c7bc28a762343202d1fc44ace6ddbf03467", + "7bb37bab32c181f3138b2ea9ea7ff84f306be3d4", [] ] }, @@ -430566,6 +430735,12 @@ ] } }, + "png": { + "META.yml": [ + "da174ac614d820479e25a9ae86217b128f2c63fa", + [] + ] + }, "pointerevents": { "META.yml": [ "1962feaf8af08b003e519fa525271e70451984d5", @@ -436037,6 +436212,10 @@ "b432854db8bc7f8292c43434d8c24a3ffe97dec0", [] ], + "import-scripts-data-url-worker.js": [ + "fdabdafc63041ea816760afb6e04ee4f6b78c54d", + [] + ], "import-scripts-diff-resource-map-worker.js": [ "0fdcb0fcf80ad7f0dffa284c5b77178bdad95ef6", [] @@ -437936,7 +438115,7 @@ [] ], "helpers.js": [ - "ddc638434aefb0217a4b4c2149d29d91d194a634", + "f718f637cd964b4b2d3fc68879fa9d4a2035480d", [] ], "resources": { @@ -446294,7 +446473,7 @@ }, "tooltool": { "tooltool.py": [ - "53929fce880285629ebf6f243d7bea86036b16d0", + "5abc98a09d8081f025d7269c1e7a1f338eb70d16", [] ] }, @@ -447657,7 +447836,7 @@ [] ], "error.py": [ - "1b65d225fae303108d3a1f0462775563172cf04e", + "81910a63eb2bf3d062cc8a6985002826bb25fa59", [] ], "modules": { @@ -447670,7 +447849,7 @@ [] ], "browsing_context.py": [ - "033929d5ff5f0cfcce215c60cb680ca7713e603d", + "abaf569f92891bb49c3bda0aee53e892d8c6ce2e", [] ], "script.py": [ @@ -447688,7 +447867,7 @@ ] }, "client.py": [ - "ba01e1fe8668de8e889cb237e1c6615c5fdffdb9", + "851c6722fc27c199956e90f4d08a4d2b10ed7976", [] ], "error.py": [ @@ -448308,7 +448487,7 @@ [] ], "testloader.py": [ - "93e2a87826c59926a649bcfb16949aa5c6c93342", + "78e05264d4d40c04c558ab8a0f5031f52ff0bd38", [] ], "testrunner.py": [ @@ -448367,7 +448546,7 @@ [] ], "test_testloader.py": [ - "0936c54ea975335a60176e168f9d98c8d588e337", + "8c8d02a22b90f1acddb9e12859aa33d52eefdb43", [] ], "test_update.py": [ @@ -448484,7 +448663,7 @@ } }, "wptrunner.py": [ - "224a4fde4df64c480232f6d3af0a651da5d0375c", + "740bb7e9f425024d8e930c5581e88940de3a99b0", [] ], "wpttest.py": [ @@ -448885,6 +449064,10 @@ "c9907203322112ffb01a50b09541e891250c4f5e", [] ], + "requestStorageAccess-integration-iframe.https.html": [ + "f4db5cf65ec6814036d40ab165b9705725df39fa", + [] + ], "requestStorageAccessForOrigin-iframe.html": [ "43d16705c8515b48685420c8d14925af90afb62a", [] @@ -449763,10 +449946,12 @@ "864132a5a36c6dde2cf9ff9e8675ac9ed765e8fa", [] ], - "README.md": [ - "4e1a7706e33337e798f98d983a89eb44b77a21d5", - [] - ], + "manual": { + "README.md": [ + "4e1a7706e33337e798f98d983a89eb44b77a21d5", + [] + ] + }, "scripts": { "ATTAcomm.js": [ "b748233fc22c43153212e8a495cdce3b48425fd9", @@ -451537,6 +451722,12 @@ [] ] } + }, + "print": { + "__init__.py": [ + "d34fef9869a859b43646bd0b7a63519cff121fba", + [] + ] } }, "conftest.py": [ @@ -451642,6 +451833,12 @@ [] ] }, + "classic_interop": { + "__init__.py": [ + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + [] + ] + }, "conftest.py": [ "09eea7b7d59c45200f95e979e917599e992aa10d", [] @@ -451654,7 +451851,7 @@ }, "evaluate": { "__init__.py": [ - "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "8b137891791fe96927ad78e64b0aad7bded08bdc", [] ] }, @@ -452050,7 +452247,7 @@ }, "print": { "__init__.py": [ - "788c0e1a3179280604a8634d4db43b4a8db6880a", + "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", [] ] }, @@ -452126,15 +452323,15 @@ [] ], "fixtures.py": [ - "e63c0d01d269d277fb299d6bf1f6cb41bdd5a091", + "7fff07bb407f7f29dabcf805d12936741cbabf6b", [] ], "fixtures_bidi.py": [ - "6273b8f1575819d6beaef35033a2f326b55b2903", + "6f1106373d955d3fa3558f7bbb65f6af3811645f", [] ], "fixtures_http.py": [ - "748fe214a2b39d57d3581eee6a196cc5ad85ac08", + "65ea064c51977c6f4d96f8e2836be86aab00969f", [] ], "helpers.py": [ @@ -464810,14 +465007,18 @@ ] ], "aes_gcm.https.any.js": [ - "8f1103d8f4a483a93259e1f91541ec4bba1647c7", + "6e3a6efb12d7b8170c204d91dc5812846b44f574", [ "WebCryptoAPI/encrypt_decrypt/aes_gcm.https.any.html", { "script_metadata": [ [ "title", - "WebCryptoAPI: encrypt() Using AES-GCM" + "WebCryptoAPI: encrypt() Using AES-GCM w/ 96-bit iv" + ], + [ + "script", + "aes_gcm_96_iv_fixtures.js" ], [ "script", @@ -464841,7 +465042,70 @@ "script_metadata": [ [ "title", - "WebCryptoAPI: encrypt() Using AES-GCM" + "WebCryptoAPI: encrypt() Using AES-GCM w/ 96-bit iv" + ], + [ + "script", + "aes_gcm_96_iv_fixtures.js" + ], + [ + "script", + "aes_gcm_vectors.js" + ], + [ + "script", + "aes.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ] + ], + "aes_gcm_256_iv.https.any.js": [ + "92900fb13ae2ecb928652d37b6d67e6b1a74d708", + [ + "WebCryptoAPI/encrypt_decrypt/aes_gcm_256_iv.https.any.html", + { + "script_metadata": [ + [ + "title", + "WebCryptoAPI: encrypt() Using AES-GCM w/ 256-bit iv" + ], + [ + "script", + "aes_gcm_256_iv_fixtures.js" + ], + [ + "script", + "aes_gcm_vectors.js" + ], + [ + "script", + "aes.js" + ], + [ + "timeout", + "long" + ] + ], + "timeout": "long" + } + ], + [ + "WebCryptoAPI/encrypt_decrypt/aes_gcm_256_iv.https.any.worker.html", + { + "script_metadata": [ + [ + "title", + "WebCryptoAPI: encrypt() Using AES-GCM w/ 256-bit iv" + ], + [ + "script", + "aes_gcm_256_iv_fixtures.js" ], [ "script", @@ -470681,7 +470945,7 @@ }, "wrapKey_unwrapKey": { "wrapKey_unwrapKey.https.any.js": [ - "95102495fe3a5be8cd8f8196328867b0d4ba5c1e", + "edb67d9e30fdba41b759992bddc8ddf755466638", [ "WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.html", { @@ -470693,6 +470957,10 @@ [ "timeout", "long" + ], + [ + "script", + "../util/helpers.js" ] ], "timeout": "long" @@ -470709,6 +470977,10 @@ [ "timeout", "long" + ], + [ + "script", + "../util/helpers.js" ] ], "timeout": "long" @@ -478446,7 +478718,7 @@ ] }, "accept-ch-change.https.html": [ - "b0a4da61ddd464c418257a3bf4264b429ec1dca6", + "826aca85a4e677730ba21f3f4b10bbe979302633", [ null, {} @@ -478783,7 +479055,7 @@ }, "critical-ch": { "iframe.https.window.js": [ - "f4dd295208fd4acddb084530cae772077004cab4", + "bbb9623752ea593a15e306152b49342c305a3420", [ "client-hints/critical-ch/iframe.https.window.html", { @@ -478797,7 +479069,7 @@ ] ], "mis-matched-count.https.window.js": [ - "54bd66789793babdc8aab812059d30aeaa21ba11", + "23d297837e6ce6cf6a12c5ef9909bb0441501c1b", [ "client-hints/critical-ch/mis-matched-count.https.window.html", { @@ -478815,7 +479087,7 @@ ] ], "mis-matched.https.window.js": [ - "9476640b3513d36850d26ab2154e0bd07db5d77d", + "10f9a30b6d257155f0d775f3baed4b0217294752", [ "client-hints/critical-ch/mis-matched.https.window.html", { @@ -478842,8 +479114,22 @@ } ] ], + "navigation.multiple.https.window.js": [ + "ff9cc210feb96f711c1e49f2ef64269bffacf12b", + [ + "client-hints/critical-ch/navigation.multiple.https.window.html", + { + "script_metadata": [ + [ + "script", + "resources/util.js" + ] + ] + } + ] + ], "non-secure.http.window.js": [ - "cdd79243982a46d60177e8721479e9eab111e88c", + "b634f98e55c94132f8c96295b0b9199e00cd9b94", [ "client-hints/critical-ch/non-secure.http.window.html", { @@ -478874,8 +479160,26 @@ } ] ], + "request-count.multiple.https.window.js": [ + "602803b5d687435273d6e4a5e8a2cc419a028726", + [ + "client-hints/critical-ch/request-count.multiple.https.window.html", + { + "script_metadata": [ + [ + "script", + "resources/util.js" + ], + [ + "script", + "/common/utils.js" + ] + ] + } + ] + ], "subresource.https.window.js": [ - "f8112b628d0f263959fd2a7dd8dfa066920f3514", + "81dfc303c62e03498314abbf9b80a2abc88d2a36", [ "client-hints/critical-ch/subresource.https.window.html", { @@ -478893,7 +479197,7 @@ ] ], "unsafe-method.https.window.js": [ - "0eca0eb8e9aea1c066d56b685f23ffadf3a6754f", + "37bbcb3315e1b14f8d45b35f3b9cfb2b2be602dc", [ "client-hints/critical-ch/unsafe-method.https.window.html", {} @@ -489409,50 +489713,6 @@ ] } }, - "core-aam": { - "aria-expanded_not_supported_on_alert.html": [ - "1317cc658f76a8e19a4dc862cc638e17a859d0fe", - [ - null, - {} - ] - ], - "aria-expanded_not_supported_on_banner.html": [ - "e1bf9cc7f45a9342d244c262186bbb1636cb2b1b", - [ - null, - {} - ] - ], - "aria-expanded_not_supported_on_dialog.html": [ - "c7feeddf2bbb35e82211055c8dcc5c8e689b815f", - [ - null, - {} - ] - ], - "aria-expanded_not_supported_on_feed.html": [ - "e81f3e49494c499ab2411cbcc7c82d41e5b3d816", - [ - null, - {} - ] - ], - "aria-expanded_not_supported_on_form.html": [ - "6b533da6f7205bad6e14e8cddf525e7adb1e521b", - [ - null, - {} - ] - ], - "aria-expanded_not_supported_on_group.html": [ - "8deb17c2b24a07c1801d214db6990e30cd883d54", - [ - null, - {} - ] - ] - }, "cors": { "304.htm": [ "2aee01417a7cdfb5cb9a69cce2bcc59d7b8eded2", @@ -514913,6 +515173,13 @@ {} ] ], + "dynamic-root-element.html": [ + "befc20d1d084d94390bb9fd2c00979a6f1ec7073", + [ + null, + {} + ] + ], "event-dispatch.tentative.html": [ "5ed01cdd2588d1a5a5226a9abb46f60dd441ed13", [ @@ -515334,7 +515601,7 @@ ] ], "zero-duration-multiple-transition.html": [ - "4268ce766d76f14af0a211e829f50434f131bd20", + "7b85702092a988aaced7070198252dda1891e40d", [ null, {} @@ -518524,7 +518791,7 @@ ] ], "calc-infinity-nan-serialize-time.html": [ - "fd3f02524ba1a9980fe98da21fca166d74b1931a", + "2baa890259cb8a4c6c9ef128c611083b4395fd56", [ null, {} @@ -519475,7 +519742,7 @@ ] ], "hit-test-unpainted-element-from-point.html": [ - "47a8e5fb994d60f02cccf5c786d7a9e3a4ad0d43", + "7c9ed911cb7776fd553265146816dfbbf5f18952", [ null, {} @@ -525245,7 +525512,7 @@ ] ], "HTMLElement.html": [ - "bd252282161b59a50b0ee991e7b2d28e94ddd74f", + "0a1d40199e633e9677da09f34e42200965b5241c", [ null, {} @@ -558074,6 +558341,751 @@ ] ] }, + "local-network-access": { + "fetch-from-treat-as-public.https.window.js": [ + "90f7feb63419d7e3c03811679644f6ccc4abd2a7", + [ + "fetch/local-network-access/fetch-from-treat-as-public.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "fetch.https.window.js": [ + "dbc4f23f677c716ba439c508c42ee33f4b1b3233", + [ + "fetch/local-network-access/fetch.https.window.html?include=baseline", + { + "script_metadata": [ + [ + "script", + "/common/subset-tests-by-key.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ], + [ + "variant", + "?include=baseline" + ], + [ + "variant", + "?include=from-local" + ], + [ + "variant", + "?include=from-private" + ], + [ + "variant", + "?include=from-public" + ] + ] + } + ], + [ + "fetch/local-network-access/fetch.https.window.html?include=from-local", + { + "script_metadata": [ + [ + "script", + "/common/subset-tests-by-key.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ], + [ + "variant", + "?include=baseline" + ], + [ + "variant", + "?include=from-local" + ], + [ + "variant", + "?include=from-private" + ], + [ + "variant", + "?include=from-public" + ] + ] + } + ], + [ + "fetch/local-network-access/fetch.https.window.html?include=from-private", + { + "script_metadata": [ + [ + "script", + "/common/subset-tests-by-key.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ], + [ + "variant", + "?include=baseline" + ], + [ + "variant", + "?include=from-local" + ], + [ + "variant", + "?include=from-private" + ], + [ + "variant", + "?include=from-public" + ] + ] + } + ], + [ + "fetch/local-network-access/fetch.https.window.html?include=from-public", + { + "script_metadata": [ + [ + "script", + "/common/subset-tests-by-key.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ], + [ + "variant", + "?include=baseline" + ], + [ + "variant", + "?include=from-local" + ], + [ + "variant", + "?include=from-private" + ], + [ + "variant", + "?include=from-public" + ] + ] + } + ] + ], + "fetch.window.js": [ + "8ee54c905629293255551d560b240c5ac7086707", + [ + "fetch/local-network-access/fetch.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "iframe.tentative.https.window.js": [ + "48bd6420fd9c46a758f8f1f01bf9e2263c8760e1", + [ + "fetch/local-network-access/iframe.tentative.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "iframe.tentative.window.js": [ + "e00cb202bec61b69d5dcd8e6c1f1b519266f9122", + [ + "fetch/local-network-access/iframe.tentative.window.html", + { + "script_metadata": [ + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "mixed-content-fetch.tentative.https.window.js": [ + "6f7d765617c9c1f8e2aec16422ad3c561c51a641", + [ + "fetch/local-network-access/mixed-content-fetch.tentative.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "nested-worker.https.window.js": [ + "3eeb435badb2d00404e0e214e1d42c4be2817f8a", + [ + "fetch/local-network-access/nested-worker.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "nested-worker.window.js": [ + "6d246e1c76d6c5f603c3e29430ae0586fdb9f5ad", + [ + "fetch/local-network-access/nested-worker.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "preflight-cache.https.window.js": [ + "87dbf501f628a25fa299240da5d5856f4366d8cc", + [ + "fetch/local-network-access/preflight-cache.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "redirect.https.window.js": [ + "f8a53ad1889e61712b98e0794de398307385b299", + [ + "fetch/local-network-access/redirect.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "service-worker-background-fetch.https.window.js": [ + "6369b166e21ef023c17ec5140282990092621990", + [ + "fetch/local-network-access/service-worker-background-fetch.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "service-worker-fetch.https.window.js": [ + "5645d78456156d09afd5b074c24215de83b19c4a", + [ + "fetch/local-network-access/service-worker-fetch.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "service-worker-update.https.window.js": [ + "fe2bf58f6600470650b9a19707a98ca895b2d86c", + [ + "fetch/local-network-access/service-worker-update.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "service-worker.https.window.js": [ + "8dc631f65a85d65a29e891482310f74c942da6b1", + [ + "fetch/local-network-access/service-worker.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "shared-worker-blob-fetch.https.window.js": [ + "ad9cd09c31b0a7aa83501f44a9e63455696ab9c2", + [ + "fetch/local-network-access/shared-worker-blob-fetch.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "shared-worker-blob-fetch.window.js": [ + "d430ea7383771844bb8955e4c6be23c63e6adc59", + [ + "fetch/local-network-access/shared-worker-blob-fetch.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "shared-worker-fetch.https.window.js": [ + "7066b359caa2ddb173a02a359d012456dd7a43a2", + [ + "fetch/local-network-access/shared-worker-fetch.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "shared-worker-fetch.window.js": [ + "9bc1a89beadc673afe783eb56b5e0b2560dbf408", + [ + "fetch/local-network-access/shared-worker-fetch.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "shared-worker.https.window.js": [ + "ecb70c41245e82ab89f652d0de01c1d3b1f80890", + [ + "fetch/local-network-access/shared-worker.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "shared-worker.window.js": [ + "ffa8a360c7032138b89d48507b0d1dcb9a23d5a2", + [ + "fetch/local-network-access/shared-worker.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "websocket.https.window.js": [ + "0731896098bcefa614ebdf28765a04766b5e6cda", + [ + "fetch/local-network-access/websocket.https.window.html", + { + "script_metadata": [ + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "websocket.window.js": [ + "a44cfaedec78b2570e868f3b81ac59575c76bc54", + [ + "fetch/local-network-access/websocket.window.html", + { + "script_metadata": [ + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "worker-blob-fetch.window.js": [ + "e119746b8a6b298a2c57bde63f03a59d8e72d477", + [ + "fetch/local-network-access/worker-blob-fetch.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "worker-fetch.https.window.js": [ + "89e0c3cf1f35f0cf741957c3eb0bff38a4705d93", + [ + "fetch/local-network-access/worker-fetch.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "worker-fetch.window.js": [ + "4d6b12f06715a8aaa88e2a290531713c036df3c1", + [ + "fetch/local-network-access/worker-fetch.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "worker.https.window.js": [ + "2d0dddd685cccf4d1ed4064db61ffcc1a3514f09", + [ + "fetch/local-network-access/worker.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "worker.window.js": [ + "118c0992544265603671862af5511f6e7220af28", + [ + "fetch/local-network-access/worker.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "xhr-from-treat-as-public.https.window.js": [ + "04fe5449d19e5baecbb1904140b315dc18206070", + [ + "fetch/local-network-access/xhr-from-treat-as-public.https.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ], + "xhr.https.window.js": [ + "4dc5da9912f1012bf72a9e689acfbc125d7c2923", + [ + "fetch/local-network-access/xhr.https.window.html?include=from-local", + { + "script_metadata": [ + [ + "script", + "/common/subset-tests-by-key.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ], + [ + "variant", + "?include=from-local" + ], + [ + "variant", + "?include=from-private" + ], + [ + "variant", + "?include=from-public" + ] + ] + } + ], + [ + "fetch/local-network-access/xhr.https.window.html?include=from-private", + { + "script_metadata": [ + [ + "script", + "/common/subset-tests-by-key.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ], + [ + "variant", + "?include=from-local" + ], + [ + "variant", + "?include=from-private" + ], + [ + "variant", + "?include=from-public" + ] + ] + } + ], + [ + "fetch/local-network-access/xhr.https.window.html?include=from-public", + { + "script_metadata": [ + [ + "script", + "/common/subset-tests-by-key.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ], + [ + "variant", + "?include=from-local" + ], + [ + "variant", + "?include=from-private" + ], + [ + "variant", + "?include=from-public" + ] + ] + } + ] + ], + "xhr.window.js": [ + "fa307dc559a76cb3cd3f70f76a3c904f4602a442", + [ + "fetch/local-network-access/xhr.window.html", + { + "script_metadata": [ + [ + "script", + "/common/utils.js" + ], + [ + "script", + "resources/support.sub.js" + ] + ] + } + ] + ] + }, "metadata": { "audio-worklet.https.html": [ "3b768ef0b5ddd2d13361629afd011e6987cb38d0", @@ -559129,751 +560141,6 @@ ] ] }, - "private-network-access": { - "fetch-from-treat-as-public.https.window.js": [ - "90f7feb63419d7e3c03811679644f6ccc4abd2a7", - [ - "fetch/private-network-access/fetch-from-treat-as-public.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "fetch.https.window.js": [ - "dbc4f23f677c716ba439c508c42ee33f4b1b3233", - [ - "fetch/private-network-access/fetch.https.window.html?include=baseline", - { - "script_metadata": [ - [ - "script", - "/common/subset-tests-by-key.js" - ], - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ], - [ - "variant", - "?include=baseline" - ], - [ - "variant", - "?include=from-local" - ], - [ - "variant", - "?include=from-private" - ], - [ - "variant", - "?include=from-public" - ] - ] - } - ], - [ - "fetch/private-network-access/fetch.https.window.html?include=from-local", - { - "script_metadata": [ - [ - "script", - "/common/subset-tests-by-key.js" - ], - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ], - [ - "variant", - "?include=baseline" - ], - [ - "variant", - "?include=from-local" - ], - [ - "variant", - "?include=from-private" - ], - [ - "variant", - "?include=from-public" - ] - ] - } - ], - [ - "fetch/private-network-access/fetch.https.window.html?include=from-private", - { - "script_metadata": [ - [ - "script", - "/common/subset-tests-by-key.js" - ], - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ], - [ - "variant", - "?include=baseline" - ], - [ - "variant", - "?include=from-local" - ], - [ - "variant", - "?include=from-private" - ], - [ - "variant", - "?include=from-public" - ] - ] - } - ], - [ - "fetch/private-network-access/fetch.https.window.html?include=from-public", - { - "script_metadata": [ - [ - "script", - "/common/subset-tests-by-key.js" - ], - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ], - [ - "variant", - "?include=baseline" - ], - [ - "variant", - "?include=from-local" - ], - [ - "variant", - "?include=from-private" - ], - [ - "variant", - "?include=from-public" - ] - ] - } - ] - ], - "fetch.window.js": [ - "8ee54c905629293255551d560b240c5ac7086707", - [ - "fetch/private-network-access/fetch.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "iframe.tentative.https.window.js": [ - "48bd6420fd9c46a758f8f1f01bf9e2263c8760e1", - [ - "fetch/private-network-access/iframe.tentative.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/dispatcher/dispatcher.js" - ], - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "iframe.tentative.window.js": [ - "e00cb202bec61b69d5dcd8e6c1f1b519266f9122", - [ - "fetch/private-network-access/iframe.tentative.window.html", - { - "script_metadata": [ - [ - "script", - "/common/dispatcher/dispatcher.js" - ], - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "mixed-content-fetch.tentative.https.window.js": [ - "54485dc70474023683f2a9f4f4fba1f0df0032af", - [ - "fetch/private-network-access/mixed-content-fetch.tentative.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "nested-worker.https.window.js": [ - "3eeb435badb2d00404e0e214e1d42c4be2817f8a", - [ - "fetch/private-network-access/nested-worker.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "nested-worker.window.js": [ - "6d246e1c76d6c5f603c3e29430ae0586fdb9f5ad", - [ - "fetch/private-network-access/nested-worker.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "preflight-cache.https.window.js": [ - "87dbf501f628a25fa299240da5d5856f4366d8cc", - [ - "fetch/private-network-access/preflight-cache.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "redirect.https.window.js": [ - "f8a53ad1889e61712b98e0794de398307385b299", - [ - "fetch/private-network-access/redirect.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "service-worker-background-fetch.https.window.js": [ - "6369b166e21ef023c17ec5140282990092621990", - [ - "fetch/private-network-access/service-worker-background-fetch.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "service-worker-fetch.https.window.js": [ - "5645d78456156d09afd5b074c24215de83b19c4a", - [ - "fetch/private-network-access/service-worker-fetch.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "service-worker-update.https.window.js": [ - "fe2bf58f6600470650b9a19707a98ca895b2d86c", - [ - "fetch/private-network-access/service-worker-update.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "service-worker.https.window.js": [ - "8dc631f65a85d65a29e891482310f74c942da6b1", - [ - "fetch/private-network-access/service-worker.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "shared-worker-blob-fetch.https.window.js": [ - "ad9cd09c31b0a7aa83501f44a9e63455696ab9c2", - [ - "fetch/private-network-access/shared-worker-blob-fetch.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "shared-worker-blob-fetch.window.js": [ - "d430ea7383771844bb8955e4c6be23c63e6adc59", - [ - "fetch/private-network-access/shared-worker-blob-fetch.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "shared-worker-fetch.https.window.js": [ - "7066b359caa2ddb173a02a359d012456dd7a43a2", - [ - "fetch/private-network-access/shared-worker-fetch.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "shared-worker-fetch.window.js": [ - "9bc1a89beadc673afe783eb56b5e0b2560dbf408", - [ - "fetch/private-network-access/shared-worker-fetch.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "shared-worker.https.window.js": [ - "ecb70c41245e82ab89f652d0de01c1d3b1f80890", - [ - "fetch/private-network-access/shared-worker.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "shared-worker.window.js": [ - "ffa8a360c7032138b89d48507b0d1dcb9a23d5a2", - [ - "fetch/private-network-access/shared-worker.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "websocket.https.window.js": [ - "0731896098bcefa614ebdf28765a04766b5e6cda", - [ - "fetch/private-network-access/websocket.https.window.html", - { - "script_metadata": [ - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "websocket.window.js": [ - "a44cfaedec78b2570e868f3b81ac59575c76bc54", - [ - "fetch/private-network-access/websocket.window.html", - { - "script_metadata": [ - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "worker-blob-fetch.window.js": [ - "e119746b8a6b298a2c57bde63f03a59d8e72d477", - [ - "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", - [ - "fetch/private-network-access/worker-fetch.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "worker-fetch.window.js": [ - "4d6b12f06715a8aaa88e2a290531713c036df3c1", - [ - "fetch/private-network-access/worker-fetch.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "worker.https.window.js": [ - "2d0dddd685cccf4d1ed4064db61ffcc1a3514f09", - [ - "fetch/private-network-access/worker.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "worker.window.js": [ - "118c0992544265603671862af5511f6e7220af28", - [ - "fetch/private-network-access/worker.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "xhr-from-treat-as-public.https.window.js": [ - "04fe5449d19e5baecbb1904140b315dc18206070", - [ - "fetch/private-network-access/xhr-from-treat-as-public.https.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ], - "xhr.https.window.js": [ - "4dc5da9912f1012bf72a9e689acfbc125d7c2923", - [ - "fetch/private-network-access/xhr.https.window.html?include=from-local", - { - "script_metadata": [ - [ - "script", - "/common/subset-tests-by-key.js" - ], - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ], - [ - "variant", - "?include=from-local" - ], - [ - "variant", - "?include=from-private" - ], - [ - "variant", - "?include=from-public" - ] - ] - } - ], - [ - "fetch/private-network-access/xhr.https.window.html?include=from-private", - { - "script_metadata": [ - [ - "script", - "/common/subset-tests-by-key.js" - ], - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ], - [ - "variant", - "?include=from-local" - ], - [ - "variant", - "?include=from-private" - ], - [ - "variant", - "?include=from-public" - ] - ] - } - ], - [ - "fetch/private-network-access/xhr.https.window.html?include=from-public", - { - "script_metadata": [ - [ - "script", - "/common/subset-tests-by-key.js" - ], - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ], - [ - "variant", - "?include=from-local" - ], - [ - "variant", - "?include=from-private" - ], - [ - "variant", - "?include=from-public" - ] - ] - } - ] - ], - "xhr.window.js": [ - "fa307dc559a76cb3cd3f70f76a3c904f4602a442", - [ - "fetch/private-network-access/xhr.window.html", - { - "script_metadata": [ - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/support.sub.js" - ] - ] - } - ] - ] - }, "range": { "blob.any.js": [ "f3eb313b34b42d12f6ee7e2740edd9360c4ab6f1", @@ -561755,7 +562022,7 @@ ] ], "FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js": [ - "7f244bc02aad96f55137f2be52f13c269b78dade", + "1b7fcda35bf9aada9b7a1a60205525f7a4383349", [ "fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.html", {} @@ -564871,6 +565138,141 @@ ] } ] + ], + "worker-cookies.tentative.https.window.js": [ + "4c29983c2b23d62dd4888f72565c70ca4454b511", + [ + "html/anonymous-iframe/worker-cookies.tentative.https.window.html?worker=dedicated_worker", + { + "script_metadata": [ + [ + "timeout", + "long" + ], + [ + "variant", + "?worker=dedicated_worker" + ], + [ + "variant", + "?worker=shared_worker" + ], + [ + "variant", + "?worker=service_worker" + ], + [ + "script", + "/common/get-host-info.sub.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "/html/cross-origin-embedder-policy/credentialless/resources/common.js" + ], + [ + "script", + "./resources/common.js" + ] + ], + "timeout": "long" + } + ], + [ + "html/anonymous-iframe/worker-cookies.tentative.https.window.html?worker=service_worker", + { + "script_metadata": [ + [ + "timeout", + "long" + ], + [ + "variant", + "?worker=dedicated_worker" + ], + [ + "variant", + "?worker=shared_worker" + ], + [ + "variant", + "?worker=service_worker" + ], + [ + "script", + "/common/get-host-info.sub.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "/html/cross-origin-embedder-policy/credentialless/resources/common.js" + ], + [ + "script", + "./resources/common.js" + ] + ], + "timeout": "long" + } + ], + [ + "html/anonymous-iframe/worker-cookies.tentative.https.window.html?worker=shared_worker", + { + "script_metadata": [ + [ + "timeout", + "long" + ], + [ + "variant", + "?worker=dedicated_worker" + ], + [ + "variant", + "?worker=shared_worker" + ], + [ + "variant", + "?worker=service_worker" + ], + [ + "script", + "/common/get-host-info.sub.js" + ], + [ + "script", + "/common/utils.js" + ], + [ + "script", + "/common/dispatcher/dispatcher.js" + ], + [ + "script", + "/html/cross-origin-embedder-policy/credentialless/resources/common.js" + ], + [ + "script", + "./resources/common.js" + ] + ], + "timeout": "long" + } + ] ] }, "browsers": { @@ -576779,7 +577181,7 @@ ] ], "2d.transformation.scale.zero.html": [ - "4ff7397ae8c4ab109e08302e71a7a745203c0313", + "f495ee2e6a0a194e65f37ce8edb62bee9c23fce3", [ null, {} @@ -589227,308 +589629,308 @@ }, "transformations": { "2d.transformation.order.html": [ - "b1308035936676ff4f37f077b8aee96f9e4b56b7", + "83815f367b7adbbcf54eada88a67753f38d124fe", [ null, {} ] ], "2d.transformation.order.worker.js": [ - "7ac61067b4b870f4ab6b8491ba69bf2e664e1680", + "d00fe230efb9659cc84f71605d8dea709a54acd6", [ "html/canvas/offscreen/transformations/2d.transformation.order.worker.html", {} ] ], "2d.transformation.rotate.direction.html": [ - "0a98c7e65f9b5fb288832048b3696eaac77c1346", + "c20608f81c87eca1485f1724ac3c9ebbc4bb9037", [ null, {} ] ], "2d.transformation.rotate.direction.worker.js": [ - "465d3b679072de2c1d93274c877f8e047f0f0a34", + "8506937583ee0329a1ed6753a024eadbd608bee4", [ "html/canvas/offscreen/transformations/2d.transformation.rotate.direction.worker.html", {} ] ], "2d.transformation.rotate.nonfinite.html": [ - "0f2227a4e5cc185d02236eaf3f1117648240e662", + "bbc294a24fef4bd800c4b13bcea624c7eb72f705", [ null, {} ] ], "2d.transformation.rotate.nonfinite.worker.js": [ - "56a04d874e864de75e904fb7961012f43aaf15a9", + "2c892a561b2e4d5a20739551a73ebb699c845a6f", [ "html/canvas/offscreen/transformations/2d.transformation.rotate.nonfinite.worker.html", {} ] ], "2d.transformation.rotate.radians.html": [ - "8a78dddd7f8e678c4e7ba762e96e8dd17900e64c", + "75121e39d7fbd8255168d452396c5f2d45b9908b", [ null, {} ] ], "2d.transformation.rotate.radians.worker.js": [ - "9780e68a02f77a578dd570f256edd536dd981261", + "8c2fdd8ab0811c8bf96abf0f42b2848aafd701f4", [ "html/canvas/offscreen/transformations/2d.transformation.rotate.radians.worker.html", {} ] ], "2d.transformation.rotate.wrap.html": [ - "7711a8c1404e95fd703737d5208c609540e0c79d", + "1f9eb838c818f473a78e09bf4f5f41abc242d68c", [ null, {} ] ], "2d.transformation.rotate.wrap.worker.js": [ - "db9fbd43bc148a62f905037c9c6db6c0f6dfeeca", + "579a1b6dd687b052276ff19bfc5804879b386a6a", [ "html/canvas/offscreen/transformations/2d.transformation.rotate.wrap.worker.html", {} ] ], "2d.transformation.rotate.wrapnegative.html": [ - "49959dac0227cabcb33cc1a37114804ae451783c", + "c06f6453155a7d84f5568f274432d75a6b877b91", [ null, {} ] ], "2d.transformation.rotate.wrapnegative.worker.js": [ - "7f93f654582433f71d38bdb7b9735540f359e883", + "cce91071210fcbcaa3214a60cbc27e97af86a51e", [ "html/canvas/offscreen/transformations/2d.transformation.rotate.wrapnegative.worker.html", {} ] ], "2d.transformation.rotate.zero.html": [ - "2255b9973dd0ee34a1ebd25fbaf0525b9a91ad57", + "0101fa27c5848c18ef66fd032f36c663e5cd907c", [ null, {} ] ], "2d.transformation.rotate.zero.worker.js": [ - "10e00c4656a0b4301328af8c785e0ee6ff89ab48", + "1ad0aa5985375c8737c7dc9518b14d9a0c054f7c", [ "html/canvas/offscreen/transformations/2d.transformation.rotate.zero.worker.html", {} ] ], "2d.transformation.scale.basic.html": [ - "c78ac79f5abc26f2e61b7da8f54acc6c4849f281", + "5c70438ba16eb54f3109878080724a0275df75f4", [ null, {} ] ], "2d.transformation.scale.basic.worker.js": [ - "39b52d57b5f68267c115b3b61d8310ca378587b4", + "73be61007a5868aee8a573e309e2738cb244d5d6", [ "html/canvas/offscreen/transformations/2d.transformation.scale.basic.worker.html", {} ] ], "2d.transformation.scale.large.html": [ - "a67d05eb2c2d8b52c0619d359d3041d85e969560", + "8974545500a128a02e45fe2a579e1cbc5dbb28a9", [ null, {} ] ], "2d.transformation.scale.large.worker.js": [ - "1293cce196fdb6fe092637de5932a40dc42b099b", + "30af9631e6ccbdfe3f0f6b6ab52ce777f0774c2d", [ "html/canvas/offscreen/transformations/2d.transformation.scale.large.worker.html", {} ] ], "2d.transformation.scale.multiple.html": [ - "717f3d305a146c994410b7bbb3d1b15dd3ada2da", + "b07acf15ce6ee9a7c837f75a24f8a75ef3e151bd", [ null, {} ] ], "2d.transformation.scale.multiple.worker.js": [ - "c5a38207ea0c1a06ba754e6117edbd7f1509d5b2", + "267a7df9441e6fd7cfc95aae12e6a830b2064990", [ "html/canvas/offscreen/transformations/2d.transformation.scale.multiple.worker.html", {} ] ], "2d.transformation.scale.negative.html": [ - "fbcec5d763a9518bf4d9e86baa9d8687e00f8fd1", + "b516c1154f4d8ff4d56352d19ffd68dc8d7784a6", [ null, {} ] ], "2d.transformation.scale.negative.worker.js": [ - "a5344a9a7177e2d128aa72cf089e93de7ba386c7", + "0e68f7e8d8ce8c1b5e03116128e3588713f87254", [ "html/canvas/offscreen/transformations/2d.transformation.scale.negative.worker.html", {} ] ], "2d.transformation.scale.nonfinite.html": [ - "ac38bc1fa468cb3087aa0e4a7fcc30e431fd359d", + "3d9c75a0dc0200245ec34767a0e1257a49ae6e99", [ null, {} ] ], "2d.transformation.scale.nonfinite.worker.js": [ - "95e9922b69b521a2211502a4718425b2434e8648", + "67c5c104481ce86d046044c0692eb1f56e3b02c9", [ "html/canvas/offscreen/transformations/2d.transformation.scale.nonfinite.worker.html", {} ] ], "2d.transformation.scale.zero.html": [ - "9eae3b1db3338dced1ee49738454559cc038d00b", + "4b664125c2271ea2ac069ad1cb924f727ffd2863", [ null, {} ] ], "2d.transformation.scale.zero.worker.js": [ - "0f8dad04422d52a66f4d49b59f22cebae76e300a", + "dc52323bc23a74eff3ac37318e7db02dab7d8c18", [ "html/canvas/offscreen/transformations/2d.transformation.scale.zero.worker.html", {} ] ], "2d.transformation.setTransform.multiple.html": [ - "f8dfb048812c34016a8ae2424855c688e92ce4a7", + "e28710858b1fe476643d1d597a463788942435a2", [ null, {} ] ], "2d.transformation.setTransform.multiple.worker.js": [ - "9d01c1302ec136bce85fe918bda42f176b591bf3", + "b6b004601fb6b4a363acca80dd7b4b0d54ef36b2", [ "html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.worker.html", {} ] ], "2d.transformation.setTransform.nonfinite.html": [ - "fbed341a04a5599f1646fa3b92cdcd4b5d54d162", + "03c1b74579f0638147a6f8ff14d31dc6bb034e56", [ null, {} ] ], "2d.transformation.setTransform.nonfinite.worker.js": [ - "be7e055a853ccff10e7ba9f76237dd3229a36dc1", + "bd48262ca7d3bc7a5ca87b545ef07c86f906542b", [ "html/canvas/offscreen/transformations/2d.transformation.setTransform.nonfinite.worker.html", {} ] ], "2d.transformation.setTransform.skewed.html": [ - "40fa8015d4ca10258c9b4870843af85b1c9f7022", + "c49d9d8a29855fc29ed7fedf4e8209180dfd0d8d", [ null, {} ] ], "2d.transformation.setTransform.skewed.worker.js": [ - "6490f9b7094ec6094c93953e7178ecfb60ce1580", + "6f4b4769b61cd2f2ae9d4156967b3dec4ffb5ca8", [ "html/canvas/offscreen/transformations/2d.transformation.setTransform.skewed.worker.html", {} ] ], "2d.transformation.transform.identity.html": [ - "92753bc9e3eecb2f7a4b00054c967467be39c9e1", + "1efa306707c06c4e4ca8cd296cf8ad464bb6f8af", [ null, {} ] ], "2d.transformation.transform.identity.worker.js": [ - "99ac58d49d3ae634c1123bc9dd87aaae0bc59b96", + "51a11ee03ded65c2f7235ba02b9356c386874e09", [ "html/canvas/offscreen/transformations/2d.transformation.transform.identity.worker.html", {} ] ], "2d.transformation.transform.multiply.html": [ - "f69fa4330af2d17d88b4315c08a03ae1fa4a3406", + "05a1e7e5ead0af5d3b0ce215219dcb032a226e90", [ null, {} ] ], "2d.transformation.transform.multiply.worker.js": [ - "1a0e702a05bf73984e1c8416bf639e5349eac711", + "61a5f052dc722dcb2f4dbf6b6911081815e47781", [ "html/canvas/offscreen/transformations/2d.transformation.transform.multiply.worker.html", {} ] ], "2d.transformation.transform.nonfinite.html": [ - "6e679341d5d01012a23627e0251fdfe6c6073560", + "b81bda463bd3515346d1967bc4a081b0a171f29a", [ null, {} ] ], "2d.transformation.transform.nonfinite.worker.js": [ - "d596fc9744b70e25f07c6e61ea84480e0b5f215f", + "ee675151b3ab6210d022947fac799d193a7141d5", [ "html/canvas/offscreen/transformations/2d.transformation.transform.nonfinite.worker.html", {} ] ], "2d.transformation.transform.skewed.html": [ - "78e1252c67c517cb9d35f80136178fa8e9ae7416", + "9cb6dfcc52e462a8974e484100c82e9c0fb3f993", [ null, {} ] ], "2d.transformation.transform.skewed.worker.js": [ - "46416bb957010f8bea2d29fc7256e87a8d832949", + "638adc14c44c9b930bb9a9b6bd9f37af35b44e83", [ "html/canvas/offscreen/transformations/2d.transformation.transform.skewed.worker.html", {} ] ], "2d.transformation.translate.basic.html": [ - "8144ab0cc1b4e6317f08953366fec5bd2de9d03b", + "51a7527b5ccb82d4a41dc39cc20dae29fcc12b01", [ null, {} ] ], "2d.transformation.translate.basic.worker.js": [ - "695aff37da54e53f925d65896546cca85a2235af", + "11e8bd897b4d73cdae7758009bdf16931ddd884c", [ "html/canvas/offscreen/transformations/2d.transformation.translate.basic.worker.html", {} ] ], "2d.transformation.translate.nonfinite.html": [ - "4127a7a157ed2bad072b8df45ed80bec903bdbf8", + "010b28f3c6a8ebb88285e67d06f5e071fbf67c26", [ null, {} ] ], "2d.transformation.translate.nonfinite.worker.js": [ - "84b52a203b65bb9bea5834d96197a16f66149148", + "c3ff3a31a8c3fda8d5992c35a38b282aa35f7783", [ "html/canvas/offscreen/transformations/2d.transformation.translate.nonfinite.worker.html", {} @@ -604922,6 +605324,15 @@ {} ] ], + "selectmenu-form-elements.tentative.html": [ + "eed098256ca41f5f5982e8804f03309f6c4ce755", + [ + null, + { + "testdriver": true + } + ] + ], "selectmenu-form-state-restore.tentative.html": [ "1002355a5ab1ea4718ad2194826dac743ea7ec85", [ @@ -606053,7 +606464,7 @@ ] ], "popover-attribute-basic.html": [ - "88051f57394b7d525d24d74a37f5f73b05599e9f", + "c5937cd3237e55b04d93798ad4271a2cca0a22d7", [ null, { @@ -606206,7 +606617,7 @@ ] ], "popover-types.html": [ - "615c5a818c06c1bd75c5bfc80c2fc38e543048a9", + "9941f3228285690149c59d03d5dcba480d18b70b", [ null, {} @@ -616269,7 +616680,7 @@ ] ], "inert-computed-style.html": [ - "3c1748de2b424197c3d37f913cb2f91f8696a4b1", + "f1adbab6b7a5955fa7797ea9a03ed215b365d34f", [ null, {} @@ -616283,7 +616694,7 @@ ] ], "inert-iframe-hittest.html": [ - "bcc542d35edff1bf93fdb7bcc6185fceb0d130d6", + "8d7facf17230d70350adf4cd54a32151e30fc11b", [ null, { @@ -616433,7 +616844,7 @@ ] ], "non-local-ports.sub.window.js": [ - "8c9eb33c4f77ba1b7724a253a3f73d765d7425ab", + "06ecb3ab21b9cee404bb3618117dd0511da076b3", [ "infrastructure/assumptions/non-local-ports.sub.window.html", {} @@ -620787,7 +621198,7 @@ "long-animation-frame": { "tentative": { "loaf-basic.html": [ - "d289f0dd3427af4d29923d091c332113768b3b1c", + "c6d3f8e32a293a4a66af0830d0e7c275ac785f5f", [ null, { @@ -620804,8 +621215,72 @@ } ] ], + "loaf-desired-exec-time.html": [ + "5fecb20fb40dad1313d8935b37835b40d43d43f9", + [ + null, + { + "testdriver": true, + "timeout": "long" + } + ] + ], + "loaf-event-listener.html": [ + "6349c28b3202262c444aaefc558620c7baa19ff3", + [ + null, + { + "timeout": "long" + } + ] + ], + "loaf-idle.html": [ + "bc9f910bb14858527fd6727cdf4b8278df859faf", + [ + null, + { + "timeout": "long" + } + ] + ], "loaf-iframe-popup.html": [ - "83def5729984f63bcd491152f56c548a54bf0d87", + "565273b6c6adfe610778b050f62030b19a786d87", + [ + null, + { + "timeout": "long" + } + ] + ], + "loaf-promise.html": [ + "226d06a8303410d8a4ba5a116df98fa56a588ad5", + [ + null, + { + "timeout": "long" + } + ] + ], + "loaf-script-block.html": [ + "f896a737ce7cc14af380a772a06146b874a6c74e", + [ + null, + { + "timeout": "long" + } + ] + ], + "loaf-script-window-attribution.html": [ + "001bb537f79dea2b100d274ac83340218da5909f", + [ + null, + { + "timeout": "long" + } + ] + ], + "loaf-supportedEntryTypes.html": [ + "efa01481fa18b935fdace923b039065404a969d1", [ null, { @@ -620829,6 +621304,15 @@ {} ] ], + "loaf-user-callback.html": [ + "bc8fdd05e10f5d03bfdebf266701892e76e9a972", + [ + null, + { + "timeout": "long" + } + ] + ], "loaf-visibility.html": [ "97038e30738d36114fcac0a88fec7a5365509a3b", [ @@ -620838,6 +621322,13 @@ "timeout": "long" } ] + ], + "loaf-window-only.worker.js": [ + "c1f0439c4bda4f68aeeb5e89bb55a4d2a475d62c", + [ + "long-animation-frame/tentative/loaf-window-only.worker.html", + {} + ] ] } }, @@ -620952,7 +621443,7 @@ ] ], "longtask-in-raf.html": [ - "d65f8928186aa11361c1ab79ec21e2865a870368", + "169843a7423068ebda950774dbb189fd45088200", [ null, {} @@ -623804,7 +624295,7 @@ ] ], "MediaRecorder-pause-resume.html": [ - "a1495dcb0c7c84867b257286dc9430454b6adec6", + "84efe52e06b7788d71bc44fbec7c9963216f2734", [ null, {} @@ -626887,7 +627378,7 @@ ] ], "navigation-traverseTo-in-iframe-same-document-preventDefault.html": [ - "d68b11fa7ccae6a3dc6287150cf25fe8d96d93cf", + "463746e8f7977017066e4f9525b7c7a55a04a600", [ null, {} @@ -627843,6 +628334,13 @@ {} ] ], + "traverseTo-detach-cross-document-before-navigate-event.html": [ + "ed319f6223936830c15d36a08e9c782f59bffc1b", + [ + null, + {} + ] + ], "traverseTo-detach-cross-document.html": [ "8784313b70546e49d37e227ec9c0f809990b77d5", [ @@ -627850,6 +628348,13 @@ {} ] ], + "traverseTo-detach-same-document-before-navigate-event.html": [ + "592ac6f19906979ff19b7ae85f7ad9006e8a5f22", + [ + null, + {} + ] + ], "traverseTo-detach-same-document.html": [ "b0308b8df8fe4c3ed975fe16b790c29a0de1891c", [ @@ -627894,14 +628399,14 @@ ] }, "sandboxing-back-parent.html": [ - "bc3d4e2e9fb7e3906e027109fe18d275e5db744e", + "6eee3f917cdc5bfae0491685172da2fff918cdb3", [ null, {} ] ], "sandboxing-back-sibling.html": [ - "718ea6d3ddada0bc73ea965a2969f5fe79642a9c", + "97c03ea0c2fbd84cc1cc8d829bfd352d31981544", [ null, {} @@ -633137,6 +633642,22 @@ ] ] }, + "png": { + "cicp-chunk.html": [ + "4afc262dcf5ead61423a5bea21ae6e6f998a401c", + [ + null, + {} + ] + ], + "trns-chunk.html": [ + "652cda0e32089b7ade4e41c0f69a9637177bd9dd", + [ + null, + {} + ] + ] + }, "pointerevents": { "capturing_boundary_event_handler_at_ua_shadowdom.html": [ "7500277f2251fa300f9af99d52e1f73a943f237c", @@ -633229,6 +633750,15 @@ } ] ], + "pointerevent_mouse-pointer-preventdefault-passive.html": [ + "57da09686602f96da63cf8bb0b740f0862732c91", + [ + null, + { + "testdriver": true + } + ] + ], "pointerevent_mouse-pointer-preventdefault.html": [ "549cbf55d8818291f412a1627765df9611ce614c", [ @@ -651359,7 +651889,7 @@ ] ], "animation-shorthand.html": [ - "60d6c7664672b61a40f4b20e0fa89765d2bf67f4", + "87e66d0f532bf85de5e19e90235e8fc71e7cb11a", [ null, {} @@ -651394,7 +651924,7 @@ ] ], "animation-timeline-named-scroll-progress-timeline.tentative.html": [ - "9f55e2d2c91ff0045ab452cd5e30a3e54d34fe2a", + "30461723386a2e5c0440856664ff49b2cfd380e6", [ null, {} @@ -656202,6 +656732,13 @@ {} ] ], + "import-scripts-data-url.https.html": [ + "f0922193dd0112b72881d05a97aafc67c5bdc3d5", + [ + null, + {} + ] + ], "import-scripts-mime-types.https.html": [ "1679831d0f2b98aee22898d820373e80079fbe00", [ @@ -661512,7 +662049,7 @@ ] ], "requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js": [ - "67906708aed7676accb91efe2e2cad926c0d4706", + "24595ed340856e0f667dbd2671614e5c23ba712c", [ "storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.html", { @@ -661769,7 +662306,7 @@ ] ], "storage-access-permission.sub.https.window.js": [ - "4222051c10bdc1c2ad060d7da1abec0ba6ea2f25", + "82794061bd013ced4d8a42f3337fddd6a53d6d0a", [ "storage-access-api/storage-access-permission.sub.https.window.html", { @@ -669278,7 +669815,7 @@ ] ], "requestStorageAccessForOrigin.sub.https.window.js": [ - "76e5bf83b1eed2fb19f6c2ae5547b422dea6d764", + "6fff9e9189e495af43ef0a4c9a087cbc05c7d14c", [ "top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.html", { @@ -682793,7 +683330,7 @@ ] ], "getcredential-prf.https.html": [ - "61b52ac5958c7b242168285ad5e83581b4c1497e", + "40dfc5cad33921e3f5c00865a74cf79e5f81e26e", [ null, { @@ -689328,7 +689865,7 @@ ] ], "RTCPeerConnection-getStats.https.html": [ - "8062618dd6170f81dbeb5af4a43bbcc204d96e95", + "96e763985c059679b1e97b9cfab4399632c9b00b", [ null, { @@ -689713,7 +690250,7 @@ ] ], "RTCRtpReceiver-getStats.https.html": [ - "06d0f0b39bf57814114bd35c68156b89752e0c64", + "b8daf12fc275fb68ef47e1556a9ecd194f5b9e90", [ null, { @@ -689747,7 +690284,7 @@ ] ], "RTCRtpSender-getStats.https.html": [ - "27ac3e952f11d37ad50581465e6d8e8454982677", + "62c01aafa6a959f25bfd072a512ddc4b66ed1878", [ null, { @@ -690569,7 +691106,7 @@ ] ], "RTCRtpTransceiver-headerExtensionControl.html": [ - "770aa49f052f5d5f84185ca6420c674a6dadb765", + "b6dc7da5d4076d113419888e814e445e9dd2c40a", [ null, {} @@ -706793,10 +707330,12 @@ ] ], "Worker_script_mimetype.htm": [ - "4768fe70bcb0bde98c1d0bd3801362e2bcdf3150", + "d2278d3717c2f0c57673c220da49a07d8251d0d5", [ null, - {} + { + "timeout": "long" + } ] ], "Worker_terminate_event_queue.htm": [ @@ -730348,13 +730887,6 @@ {} ] ], - "background-clip-padding-box-with-border-radius.html": [ - "ee98dababbcce0d7fbee2f6b7eaff18bb78341e9", - [ - null, - {} - ] - ], "background-clip-root.html": [ "8f9f5f3ebd50137939e6f006e7cb068aa120863c", [ @@ -734769,6 +735301,31 @@ {} ] ] + }, + "print": { + "context.py": [ + "a73bfee96215621a67456a501f5b7f420cda82ce", + [ + null, + {} + ] + ], + "invalid.py": [ + "114aeb62dcc27474a0869c0964b8dca2e95c8053", + [ + null, + {} + ] + ], + "page_ranges.py": [ + "9e466883b0a6e4381b227b3c8115fd3a6e93879e", + [ + null, + { + "timeout": "long" + } + ] + ] } }, "errors": { @@ -734890,7 +735447,7 @@ }, "call_function": { "arguments.py": [ - "9fbe5fb81101054f9cafe1411a6c9a5937473324", + "daf31fc869c3dab31218b508cf4b24b6a084f78a", [ null, {} @@ -734925,7 +735482,7 @@ ] ], "invalid.py": [ - "cf5a07f41b78b00d688e8c3f8b29259856fa79bb", + "d73705c672470e1fe1986b61808b29eae4aea4d6", [ null, {} @@ -734953,7 +735510,7 @@ ] ], "result_node.py": [ - "08e47be5f714de3a53d39c0dfec45a4d6827fb5a", + "e1575374fd594c24e395a4e5c2f2fdfb6c53b563", [ null, {} @@ -734967,7 +735524,7 @@ ] ], "sandbox.py": [ - "e0a4914d8f6024db9966d6f54e215a237f099285", + "382ede3c7839afcaa625aa56ef2b9d728f7730a3", [ null, {} @@ -734988,6 +735545,15 @@ ] ] }, + "classic_interop": { + "node_shared_id.py": [ + "410d029207c6674c2263a58f875c10d3c7784fdd", + [ + null, + {} + ] + ] + }, "disown": { "handles.py": [ "d4a514576624cd9fce98cf244b00ca39008ba0ee", @@ -735069,7 +735635,7 @@ ] ], "result_node.py": [ - "0d0589a5f3816e4aa64aa275360bee0ee76c5958", + "63915a8f4a4781330583b29fbd62f020a9801c2e", [ null, {} @@ -735083,7 +735649,7 @@ ] ], "sandbox.py": [ - "ba4eb732d16f2bb533af67b1ef15d347b6b6734d", + "3a6771780d5f69af4054cd7fdcac35e8f6139aee", [ null, {} @@ -735299,7 +735865,7 @@ }, "element_clear": { "clear.py": [ - "fa96ed3a58aa0ae81216926e153381ecfe3f2ae8", + "9b0d7f2133f7686603449897c659c7e4220ec746", [ null, { @@ -735333,7 +735899,7 @@ ] ], "click.py": [ - "79be957d1b214527b363d9b35d46af67c7d3f9de", + "3c3f7d70e6c6b23932e7452f73e160a2d213a5ba", [ null, {} @@ -735442,7 +736008,7 @@ ] ], "send_keys.py": [ - "854d2af42ccc8f42735a3e7b6df7217fdb8770b3", + "281c7ad719ddd05dac2ab7c6de343e9bebde4a5b", [ null, {} @@ -735460,7 +736026,7 @@ }, "execute_async_script": { "arguments.py": [ - "55fd9527aea390c7a1a9ae7556022ab854cfc6f9", + "ead6e0c186ea40771643aea56ccc7180e6cc28d7", [ null, {} @@ -735527,7 +736093,7 @@ }, "execute_script": { "arguments.py": [ - "53c49aaa6897dc4f60da317480161c1516a7ec18", + "b8657ce0efae2a266158bb8c2846864cd63c1d5e", [ null, {} @@ -735781,7 +736347,7 @@ }, "get_computed_label": { "get.py": [ - "8124fee0c9dec85f9478b6702b25b4fdece96a8e", + "0dc00a471a9a37509e4ed7a448c1213bb978eeda", [ null, {} @@ -735790,7 +736356,7 @@ }, "get_computed_role": { "get.py": [ - "dcfe753f0dcaf65d6cbd77a074a0039ad0564cde", + "8d15e8fb90ddda39c13836134d179ca7cb5cc7fe", [ null, {} @@ -735831,7 +736397,7 @@ }, "get_element_attribute": { "get.py": [ - "e23d7e4d5abbf2ce430e16816e7d49b740e931fb", + "375f25032c06a10fecf78a884647056fbd826b9d", [ null, {} @@ -735849,7 +736415,7 @@ }, "get_element_css_value": { "get.py": [ - "f9797c2cff51b06818c9d2f9f46efdf321e50504", + "6f0a8a56395788be0f9152028f569f133fcd79ed", [ null, {} @@ -735867,7 +736433,7 @@ }, "get_element_property": { "get.py": [ - "072375804e814cfe2dc0d13e89f3389ec52b674d", + "84e4e89628146e3984ba926a2a9a88fb27fa9f4e", [ null, {} @@ -735885,7 +736451,7 @@ }, "get_element_rect": { "get.py": [ - "7f87b44e7e932b9e5215bb277af12a6be779fc3c", + "942f119f43c9bb30eaefd52f3c793d7e47cfbfc4", [ null, {} @@ -735903,7 +736469,7 @@ }, "get_element_shadow_root": { "get.py": [ - "61d0d008100495a308189e2494184b4490cc6e39", + "d9adde0b9e3aee402aa2e03db9d02259d968e81b", [ null, {} @@ -735921,7 +736487,7 @@ }, "get_element_tag_name": { "get.py": [ - "1bf19309e45888edcbf4483daa4970d81a70dad0", + "3bb03d79886d88c6ba045d9f0bedae7414412025", [ null, {} @@ -735939,7 +736505,7 @@ }, "get_element_text": { "get.py": [ - "aa36c487c809e101029689ef4aa1a1b8f25ec8d0", + "e8d559cf661acee18a39cbc4b6bb03289385ca08", [ null, {} @@ -736090,7 +736656,7 @@ }, "is_element_enabled": { "enabled.py": [ - "34e5cce4197cb2f3d33a34e819119f4581ea3b55", + "fccff383a55a7929179810216407acbdea0a079c", [ null, {} @@ -736108,7 +736674,7 @@ }, "is_element_selected": { "selected.py": [ - "b119705e7dd16fc87f41d17fc6b77c159a5a5a65", + "1fb5b9ce86b521069f638956272e3101ea62cc5c", [ null, {} @@ -736477,7 +737043,7 @@ }, "print": { "printcmd.py": [ - "169e2249a99449d99e44eed55f8565836e139468", + "415786675c5936bb55cf4c6c4b49980407aa0547", [ null, { @@ -736651,7 +737217,7 @@ ] ], "screenshot.py": [ - "deea9514ed48f107196447dbe8f1f660720ba48d", + "ea4cc290db4cdd603d9dc20bbc90914c4e241cb5", [ null, {} diff --git a/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm_256_iv.https.any.js.ini b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm_256_iv.https.any.js.ini new file mode 100644 index 00000000000..751ae3bdb5b --- /dev/null +++ b/tests/wpt/metadata/WebCryptoAPI/encrypt_decrypt/aes_gcm_256_iv.https.any.js.ini @@ -0,0 +1,5 @@ +[aes_gcm_256_iv.https.any.worker.html] + expected: ERROR + +[aes_gcm_256_iv.https.any.html] + expected: ERROR diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-001.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-001.html.ini deleted file mode 100644 index 0842d0b5727..00000000000 --- a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-001.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[hit-test-floats-001.html] - [hit-test-floats-001] - expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/linebox/inline-negative-margin-001.html.ini b/tests/wpt/metadata/css/CSS2/linebox/inline-negative-margin-001.html.ini index a057f038339..5e3a96e5999 100644 --- a/tests/wpt/metadata/css/CSS2/linebox/inline-negative-margin-001.html.ini +++ b/tests/wpt/metadata/css/CSS2/linebox/inline-negative-margin-001.html.ini @@ -8,8 +8,5 @@ [[data-expected-height\] 3] expected: FAIL - [[data-expected-height\] 1] - expected: FAIL - - [[data-expected-height\] 2] + [[data-expected-height\] 4] expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini b/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini deleted file mode 100644 index 3e5096beef3..00000000000 --- a/tests/wpt/metadata/css/CSS2/normal-flow/block-in-inline-hittest-float-002.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[block-in-inline-hittest-float-002.html] - [block-in-inline-hittest-float-002] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-breaking/segment-break-transformation-unremovable-2.html.ini b/tests/wpt/metadata/css/css-text/line-breaking/segment-break-transformation-unremovable-2.html.ini deleted file mode 100644 index 2a64df11b9a..00000000000 --- a/tests/wpt/metadata/css/css-text/line-breaking/segment-break-transformation-unremovable-2.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[segment-break-transformation-unremovable-2.html] - expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/trailing-other-space-separators-break-spaces-005.html.ini b/tests/wpt/metadata/css/css-text/white-space/trailing-other-space-separators-break-spaces-005.html.ini new file mode 100644 index 00000000000..b9463b3ee1e --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/trailing-other-space-separators-break-spaces-005.html.ini @@ -0,0 +1,2 @@ +[trailing-other-space-separators-break-spaces-005.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/white-space/trailing-other-space-separators-break-spaces-012.html.ini b/tests/wpt/metadata/css/css-text/white-space/trailing-other-space-separators-break-spaces-012.html.ini new file mode 100644 index 00000000000..c4ec0fbcc2f --- /dev/null +++ b/tests/wpt/metadata/css/css-text/white-space/trailing-other-space-separators-break-spaces-012.html.ini @@ -0,0 +1,2 @@ +[trailing-other-space-separators-break-spaces-012.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transitions/dynamic-root-element.html.ini b/tests/wpt/metadata/css/css-transitions/dynamic-root-element.html.ini new file mode 100644 index 00000000000..f55fcd9f3a4 --- /dev/null +++ b/tests/wpt/metadata/css/css-transitions/dynamic-root-element.html.ini @@ -0,0 +1,2 @@ +[dynamic-root-element.html] + expected: CRASH diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini index cfd069eec6c..442caf6e43f 100644 --- a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini +++ b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini @@ -326,3 +326,303 @@ [margin-right length(mm) / values] expected: [FAIL, PASS] + + [margin-right length(cm) / values] + expected: FAIL + + [margin-right length(in) / values] + expected: FAIL + + [margin-top length(pt) / values] + expected: FAIL + + [margin-top length(pc) / values] + expected: FAIL + + [margin-top length(px) / values] + expected: FAIL + + [margin-top length(em) / values] + expected: FAIL + + [margin-top length(ex) / values] + expected: FAIL + + [margin-top length(mm) / values] + expected: FAIL + + [margin-top length(cm) / values] + expected: FAIL + + [margin-top length(in) / values] + expected: FAIL + + [height length(pt) / values] + expected: FAIL + + [height length(pc) / values] + expected: FAIL + + [height length(px) / values] + expected: FAIL + + [height length(em) / values] + expected: FAIL + + [height length(ex) / values] + expected: FAIL + + [height length(mm) / values] + expected: FAIL + + [height length(cm) / values] + expected: FAIL + + [height length(in) / values] + expected: FAIL + + [height percentage(%) / values] + expected: FAIL + + [width length(pt) / values] + expected: FAIL + + [width length(pc) / values] + expected: FAIL + + [width length(px) / values] + expected: FAIL + + [width length(em) / values] + expected: FAIL + + [width length(ex) / values] + expected: FAIL + + [width length(mm) / values] + expected: FAIL + + [width length(cm) / values] + expected: FAIL + + [width length(in) / values] + expected: FAIL + + [width percentage(%) / values] + expected: FAIL + + [min-height length(pt) / values] + expected: FAIL + + [min-height length(pc) / values] + expected: FAIL + + [min-height length(px) / values] + expected: FAIL + + [min-height length(em) / values] + expected: FAIL + + [min-height length(ex) / values] + expected: FAIL + + [min-height length(mm) / values] + expected: FAIL + + [min-height length(cm) / values] + expected: FAIL + + [min-height length(in) / values] + expected: FAIL + + [min-height percentage(%) / values] + expected: FAIL + + [min-width length(pt) / values] + expected: FAIL + + [min-width length(pc) / values] + expected: FAIL + + [min-width length(px) / values] + expected: FAIL + + [min-width length(em) / values] + expected: FAIL + + [min-width length(ex) / values] + expected: FAIL + + [min-width length(mm) / values] + expected: FAIL + + [min-width length(cm) / values] + expected: FAIL + + [min-width length(in) / values] + expected: FAIL + + [min-width percentage(%) / values] + expected: FAIL + + [max-height length(pt) / values] + expected: FAIL + + [max-height length(pc) / values] + expected: FAIL + + [max-height length(px) / values] + expected: FAIL + + [max-height length(em) / values] + expected: FAIL + + [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 diff --git a/tests/wpt/metadata/css/css-values/calc-infinity-nan-serialize-time.html.ini b/tests/wpt/metadata/css/css-values/calc-infinity-nan-serialize-time.html.ini index 6af7d919ad8..b24f2c792bb 100644 --- a/tests/wpt/metadata/css/css-values/calc-infinity-nan-serialize-time.html.ini +++ b/tests/wpt/metadata/css/css-values/calc-infinity-nan-serialize-time.html.ini @@ -82,3 +82,6 @@ ['calc(1s * clamp(-inFinity, infinity, 10))' as a specified value should serialize as 'calc(10s)'.] expected: FAIL + + ['calc(1ms * NaN)' as a specified value should serialize as 'calc(NaN * 1s)'.] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini new file mode 100644 index 00000000000..f18b8d2fcf9 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini @@ -0,0 +1,3 @@ +[CaretPosition-001.html] + [Element at (400, 100)] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini new file mode 100644 index 00000000000..b905fe70fcb --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-ellipsis-in-inline-box.html.ini @@ -0,0 +1,3 @@ +[elementFromPoint-ellipsis-in-inline-box.html] + [elementFromPoint-ellipsis-in-inline-box] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini index 8ae9bae3500..390e170437a 100644 --- a/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini +++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-list-001.html.ini @@ -13,3 +13,15 @@ [
  • Outside 3
  • ] expected: FAIL + + [
  • Inside 2
  • ] + expected: FAIL + + [
  • Inside 3
  • ] + expected: FAIL + + [
  • Image Inside 1
  • ] + expected: FAIL + + [
  • Image Inside 2
  • ] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-subpixel.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-subpixel.html.ini deleted file mode 100644 index 8f6f663ba61..00000000000 --- a/tests/wpt/metadata/css/cssom-view/elementFromPoint-subpixel.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[elementFromPoint-subpixel.html] - [Hit test top left corner of box] - expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-visibility-hidden-resizer.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-visibility-hidden-resizer.html.ini new file mode 100644 index 00000000000..a6bca7ac372 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-visibility-hidden-resizer.html.ini @@ -0,0 +1,3 @@ +[elementFromPoint-visibility-hidden-resizer.html] + [elementFromPoint on resizer area of an element with visibility:hidden] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini index ceb43099040..898f39c4330 100644 --- a/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini +++ b/tests/wpt/metadata/css/cssom-view/elementFromPosition.html.ini @@ -17,3 +17,6 @@ [test some point of the element: bottom right corner] expected: FAIL + + [test the top of layer] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini b/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini deleted file mode 100644 index a3496a40d07..00000000000 --- a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[elementsFromPoint-invalid-cases.html] - [The root element is the last element returned for otherwise empty queries within the viewport] - expected: FAIL diff --git a/tests/wpt/metadata/custom-elements/reactions/HTMLElement.html.ini b/tests/wpt/metadata/custom-elements/reactions/HTMLElement.html.ini index 0edb8845eed..6b36b7c0d59 100644 --- a/tests/wpt/metadata/custom-elements/reactions/HTMLElement.html.ini +++ b/tests/wpt/metadata/custom-elements/reactions/HTMLElement.html.ini @@ -41,3 +41,9 @@ [outerText on HTMLElement must enqueue a disconnected reaction] expected: FAIL + + [popover on HTMLElement must enqueue an attributeChanged reaction when adding popover content attribute] + expected: FAIL + + [popover on HTMLElement must enqueue an attributeChanged reaction when replacing an existing attribute] + expected: FAIL diff --git a/tests/wpt/metadata/fetch/private-network-access/fetch-from-treat-as-public.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/fetch-from-treat-as-public.https.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/fetch-from-treat-as-public.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/fetch-from-treat-as-public.https.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/fetch.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/fetch.https.window.js.ini similarity index 86% rename from tests/wpt/metadata/fetch/private-network-access/fetch.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/fetch.https.window.js.ini index b900b72b643..4d6c6cb1bb0 100644 --- a/tests/wpt/metadata/fetch/private-network-access/fetch.https.window.js.ini +++ b/tests/wpt/metadata/fetch/local-network-access/fetch.https.window.js.ini @@ -1,5 +1,3 @@ -[fetch.https.window.html?include=from-local] - [fetch.https.window.html?include=baseline] [local to public: PUT preflight failure.] expected: FAIL @@ -55,6 +53,8 @@ expected: FAIL +[fetch.https.window.html?include=from-local] + [fetch.https.window.html?include=from-private] [private to local: failed preflight.] expected: FAIL @@ -79,17 +79,3 @@ [private to local: no-CORS mode missing PNA header on preflight response.] expected: FAIL - - -[fetch.https.window.html?include=from-treat-as-public] - [treat-as-public-address to local: failed preflight.] - expected: FAIL - - [treat-as-public-address to local: success.] - expected: FAIL - - [treat-as-public-address to private: failed preflight.] - expected: FAIL - - [treat-as-public-address to private: success.] - expected: FAIL diff --git a/tests/wpt/metadata/fetch/private-network-access/fetch.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/fetch.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/fetch.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/fetch.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/iframe.tentative.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/iframe.tentative.https.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/iframe.tentative.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/iframe.tentative.https.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/iframe.tentative.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/iframe.tentative.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/iframe.tentative.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/iframe.tentative.window.js.ini diff --git a/tests/wpt/metadata/fetch/local-network-access/mixed-content-fetch.tentative.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/mixed-content-fetch.tentative.https.window.js.ini new file mode 100644 index 00000000000..87f9c6b6f17 --- /dev/null +++ b/tests/wpt/metadata/fetch/local-network-access/mixed-content-fetch.tentative.https.window.js.ini @@ -0,0 +1,135 @@ +[mixed-content-fetch.tentative.https.window.html] + [https-loopback to http-loopback: wrong targetAddressSpace "unknown".] + expected: FAIL + + [https-loopback to http-loopback: wrong targetAddressSpace "local".] + expected: FAIL + + [https-loopback to http-loopback: wrong targetAddressSpace "public".] + expected: FAIL + + [https-loopback to http-loopback: not a local network request.] + expected: FAIL + + [https-loopback to http-local: wrong targetAddressSpace "unknown".] + expected: FAIL + + [https-loopback to http-local: wrong targetAddressSpace "loopback".] + expected: FAIL + + [https-loopback to http-local: wrong targetAddressSpace "public".] + expected: FAIL + + [https-loopback to http-local: not a local network request.] + expected: FAIL + + [https-loopback to http-public: wrong targetAddressSpace "unknown".] + expected: FAIL + + [https-loopback to http-public: wrong targetAddressSpace "loopback".] + expected: FAIL + + [https-loopback to http-public: wrong targetAddressSpace "local".] + expected: FAIL + + [https-loopback to http-public: not a local network request.] + expected: FAIL + + [https-local to http-loopback: missing targetAddressSpace.] + expected: FAIL + + [https-local to http-loopback: wrong targetAddressSpace "unknown".] + expected: FAIL + + [https-local to http-loopback: wrong targetAddressSpace "local".] + expected: FAIL + + [https-local to http-loopback: wrong targetAddressSpace "public".] + expected: FAIL + + [https-local to http-loopback: failed preflight.] + expected: FAIL + + [https-local to http-loopback: success.] + expected: FAIL + + [https-local to http-local: wrong targetAddressSpace "unknown".] + expected: FAIL + + [https-local to http-local: wrong targetAddressSpace "loopback".] + expected: FAIL + + [https-local to http-local: wrong targetAddressSpace "public".] + expected: FAIL + + [https-local to http-local: not a local network request.] + expected: FAIL + + [https-local to http-public: wrong targetAddressSpace "unknown".] + expected: FAIL + + [https-local to http-public: wrong targetAddressSpace "loopback".] + expected: FAIL + + [https-local to http-public: wrong targetAddressSpace "local".] + expected: FAIL + + [https-local to http-public: not a local network request.] + expected: FAIL + + [https-public to http-loopback: missing targetAddressSpace.] + expected: FAIL + + [https-public to http-loopback: wrong targetAddressSpace "unknown".] + expected: FAIL + + [https-public to http-loopback: wrong targetAddressSpace "local".] + expected: FAIL + + [https-public to http-loopback: wrong targetAddressSpace "public".] + expected: FAIL + + [https-public to http-loopback: failed preflight.] + expected: FAIL + + [https-public to http-loopback: success.] + expected: FAIL + + [https-public to http-local: missing targetAddressSpace.] + expected: FAIL + + [https-public to http-local: wrong targetAddressSpace "unknown".] + expected: FAIL + + [https-public to http-local: wrong targetAddressSpace "loopback".] + expected: FAIL + + [https-public to http-local: wrong targetAddressSpace "public".] + expected: FAIL + + [https-public to http-local: failed preflight.] + expected: FAIL + + [https-public to http-local: success.] + expected: FAIL + + [https-public to http-public: wrong targetAddressSpace "unknown".] + expected: FAIL + + [https-public to http-public: wrong targetAddressSpace "loopback".] + expected: FAIL + + [https-public to http-public: wrong targetAddressSpace "local".] + expected: FAIL + + [https-public to http-public: not a local network request.] + expected: FAIL + + [https-treat-as-public to http-loopback: wrong targetAddressSpace "local".] + expected: FAIL + + [https-treat-as-public to http-local: wrong targetAddressSpace "loopback".] + expected: FAIL + + [https-treat-as-public to http-local: success.] + expected: FAIL diff --git a/tests/wpt/metadata/fetch/private-network-access/nested-worker.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/nested-worker.https.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/nested-worker.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/nested-worker.https.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/nested-worker.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/nested-worker.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/nested-worker.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/nested-worker.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/preflight-cache.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/preflight-cache.https.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/preflight-cache.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/preflight-cache.https.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/redirect.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/redirect.https.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/redirect.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/redirect.https.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/service-worker-background-fetch.https.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/service-worker-background-fetch.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/service-worker-background-fetch.https.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/service-worker-fetch.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/service-worker-fetch.https.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/service-worker-fetch.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/service-worker-fetch.https.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/service-worker-update.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/service-worker-update.https.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/service-worker-update.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/service-worker-update.https.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/service-worker.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/service-worker.https.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/service-worker.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/service-worker.https.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/shared-worker-blob-fetch.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/shared-worker-blob-fetch.https.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/shared-worker-blob-fetch.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/shared-worker-blob-fetch.https.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/shared-worker-blob-fetch.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/shared-worker-blob-fetch.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/shared-worker-blob-fetch.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/shared-worker-blob-fetch.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/shared-worker-fetch.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/shared-worker-fetch.https.window.js.ini similarity index 87% rename from tests/wpt/metadata/fetch/private-network-access/shared-worker-fetch.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/shared-worker-fetch.https.window.js.ini index 22b714229e3..531ee59cc61 100644 --- a/tests/wpt/metadata/fetch/private-network-access/shared-worker-fetch.https.window.js.ini +++ b/tests/wpt/metadata/fetch/local-network-access/shared-worker-fetch.https.window.js.ini @@ -27,15 +27,6 @@ [public to public: success.] expected: NOTRUN - [treat-as-public to local: failure.] - expected: NOTRUN - - [treat-as-public to private: failure.] - expected: NOTRUN - - [treat-as-public to public: success.] - expected: NOTRUN - [treat-as-public to local: failed preflight.] expected: NOTRUN @@ -47,3 +38,6 @@ [treat-as-public to private: success.] expected: NOTRUN + + [treat-as-public to public: success.] + expected: NOTRUN diff --git a/tests/wpt/metadata/fetch/private-network-access/shared-worker-fetch.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/shared-worker-fetch.window.js.ini similarity index 87% rename from tests/wpt/metadata/fetch/private-network-access/shared-worker-fetch.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/shared-worker-fetch.window.js.ini index f0099d7d57f..d1acbafe5bf 100644 --- a/tests/wpt/metadata/fetch/private-network-access/shared-worker-fetch.window.js.ini +++ b/tests/wpt/metadata/fetch/local-network-access/shared-worker-fetch.window.js.ini @@ -27,20 +27,14 @@ [treat-as-public to public: success.] expected: NOTRUN - [private https to local: failure.] + [local https to local: success.] expected: NOTRUN - [pubiic https to local: failure.] + [private https to local: failure.] expected: NOTRUN [public https to local: failure.] expected: NOTRUN - [local https to local: failure.] - expected: NOTRUN - - [local https to local: success.] - expected: NOTRUN - [public https to private: failure.] expected: NOTRUN diff --git a/tests/wpt/metadata/fetch/private-network-access/shared-worker.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/shared-worker.https.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/shared-worker.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/shared-worker.https.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/shared-worker.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/shared-worker.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/shared-worker.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/shared-worker.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/websocket.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/websocket.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/websocket.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/websocket.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/worker-blob-fetch.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/worker-blob-fetch.window.js.ini similarity index 81% rename from tests/wpt/metadata/fetch/private-network-access/worker-blob-fetch.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/worker-blob-fetch.window.js.ini index 03a7b6f1d92..25ca088668d 100644 --- a/tests/wpt/metadata/fetch/private-network-access/worker-blob-fetch.window.js.ini +++ b/tests/wpt/metadata/fetch/local-network-access/worker-blob-fetch.window.js.ini @@ -1,4 +1,7 @@ [worker-blob-fetch.window.html] + [local to local: success.] + expected: FAIL + [private to local: failure.] expected: FAIL @@ -11,6 +14,9 @@ [public to private: failure.] expected: FAIL + [public to public: success.] + expected: FAIL + [treat-as-public to local: failure.] expected: FAIL @@ -20,18 +26,6 @@ [treat-as-public to public: success.] expected: FAIL - [public https to private: failure.] - expected: FAIL - - [public https to local: failure.] - expected: FAIL - - [private https to local: failure.] - expected: FAIL - - [local to local: success.] - expected: FAIL - [local https to local https: success.] expected: FAIL @@ -43,6 +37,3 @@ [public https to local https: failure.] expected: FAIL - - [public to public: success.] - expected: FAIL diff --git a/tests/wpt/metadata/fetch/private-network-access/worker-fetch.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/worker-fetch.https.window.js.ini similarity index 90% rename from tests/wpt/metadata/fetch/private-network-access/worker-fetch.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/worker-fetch.https.window.js.ini index 6cd5a624687..9a23a9e10af 100644 --- a/tests/wpt/metadata/fetch/private-network-access/worker-fetch.https.window.js.ini +++ b/tests/wpt/metadata/fetch/local-network-access/worker-fetch.https.window.js.ini @@ -17,9 +17,6 @@ [public to private: success.] expected: FAIL - [treat-as-public to local: failure.] - expected: FAIL - [treat-as-public to local: failed preflight.] expected: FAIL diff --git a/tests/wpt/metadata/fetch/private-network-access/worker-fetch.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/worker-fetch.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/worker-fetch.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/worker-fetch.window.js.ini index 7877d69e75b..3117a884c7c 100644 --- a/tests/wpt/metadata/fetch/private-network-access/worker-fetch.window.js.ini +++ b/tests/wpt/metadata/fetch/local-network-access/worker-fetch.window.js.ini @@ -1,7 +1,4 @@ [worker-fetch.window.html] - [treat-as-public to local: failure.] - expected: FAIL - [private to local: failure.] expected: FAIL @@ -11,6 +8,9 @@ [public to private: failure.] expected: FAIL + [treat-as-public to local: failure.] + expected: FAIL + [treat-as-public to private: failure.] expected: FAIL diff --git a/tests/wpt/metadata/fetch/private-network-access/worker.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/worker.https.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/worker.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/worker.https.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/worker.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/worker.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/worker.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/worker.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/xhr-from-treat-as-public.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/xhr-from-treat-as-public.https.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/xhr-from-treat-as-public.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/xhr-from-treat-as-public.https.window.js.ini diff --git a/tests/wpt/metadata/fetch/private-network-access/xhr.https.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/xhr.https.window.js.ini similarity index 59% rename from tests/wpt/metadata/fetch/private-network-access/xhr.https.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/xhr.https.window.js.ini index 08c2eedd219..55c3b9c0f4a 100644 --- a/tests/wpt/metadata/fetch/private-network-access/xhr.https.window.js.ini +++ b/tests/wpt/metadata/fetch/local-network-access/xhr.https.window.js.ini @@ -8,20 +8,6 @@ expected: FAIL -[xhr.https.window.html?include=from-treat-as-public] - [treat-as-public to local: failed preflight.] - expected: FAIL - - [treat-as-public to local: success.] - expected: FAIL - - [treat-as-public to private: failed preflight.] - expected: FAIL - - [treat-as-public to private: success.] - expected: FAIL - - [xhr.https.window.html?include=from-public] [public to local: failed preflight.] expected: FAIL diff --git a/tests/wpt/metadata/fetch/private-network-access/xhr.window.js.ini b/tests/wpt/metadata/fetch/local-network-access/xhr.window.js.ini similarity index 100% rename from tests/wpt/metadata/fetch/private-network-access/xhr.window.js.ini rename to tests/wpt/metadata/fetch/local-network-access/xhr.window.js.ini index 341bf6fc075..5b0e01c0942 100644 --- a/tests/wpt/metadata/fetch/private-network-access/xhr.window.js.ini +++ b/tests/wpt/metadata/fetch/local-network-access/xhr.window.js.ini @@ -1,7 +1,4 @@ [xhr.window.html] - [treat-as-public-address to local: failure.] - expected: FAIL - [private to local: failure.] expected: FAIL @@ -11,6 +8,9 @@ [public to private: failure.] expected: FAIL + [treat-as-public-address to local: failure.] + expected: FAIL + [treat-as-public-address to private: failure.] expected: FAIL diff --git a/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini b/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini index f9de5391ad6..0d48169e3cc 100644 --- a/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini +++ b/tests/wpt/metadata/fetch/metadata/generated/css-images.sub.tentative.html.ini @@ -146,3 +146,6 @@ [list-style-image sec-fetch-site - HTTPS downgrade-upgrade] expected: FAIL + + [background-image sec-fetch-site - HTTPS downgrade (header not sent)] + expected: TIMEOUT diff --git a/tests/wpt/metadata/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js.ini b/tests/wpt/metadata/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js.ini deleted file mode 100644 index 061d0a797f4..00000000000 --- a/tests/wpt/metadata/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js.ini +++ /dev/null @@ -1,135 +0,0 @@ -[mixed-content-fetch.tentative.https.window.html] - [https-local to http-local: wrong targetAddressSpace "unknown".] - expected: FAIL - - [https-local to http-local: wrong targetAddressSpace "private".] - expected: FAIL - - [https-local to http-local: wrong targetAddressSpace "public".] - expected: FAIL - - [https-local to http-local: not a private network request.] - expected: FAIL - - [https-local to http-private: wrong targetAddressSpace "unknown".] - expected: FAIL - - [https-local to http-private: wrong targetAddressSpace "local".] - expected: FAIL - - [https-local to http-private: wrong targetAddressSpace "public".] - expected: FAIL - - [https-local to http-private: not a private network request.] - expected: FAIL - - [https-local to http-public: wrong targetAddressSpace "unknown".] - expected: FAIL - - [https-local to http-public: wrong targetAddressSpace "local".] - expected: FAIL - - [https-local to http-public: wrong targetAddressSpace "private".] - expected: FAIL - - [https-local to http-public: not a private network request.] - expected: FAIL - - [https-private to http-local: missing targetAddressSpace.] - expected: FAIL - - [https-private to http-local: wrong targetAddressSpace "unknown".] - expected: FAIL - - [https-private to http-local: wrong targetAddressSpace "private".] - expected: FAIL - - [https-private to http-local: wrong targetAddressSpace "public".] - expected: FAIL - - [https-private to http-local: failed preflight.] - expected: FAIL - - [https-private to http-local: success.] - expected: FAIL - - [https-private to http-private: wrong targetAddressSpace "unknown".] - expected: FAIL - - [https-private to http-private: wrong targetAddressSpace "local".] - expected: FAIL - - [https-private to http-private: wrong targetAddressSpace "public".] - expected: FAIL - - [https-private to http-private: not a private network request.] - expected: FAIL - - [https-private to http-public: wrong targetAddressSpace "unknown".] - expected: FAIL - - [https-private to http-public: wrong targetAddressSpace "local".] - expected: FAIL - - [https-private to http-public: wrong targetAddressSpace "private".] - expected: FAIL - - [https-private to http-public: not a private network request.] - expected: FAIL - - [https-public to http-local: missing targetAddressSpace.] - expected: FAIL - - [https-public to http-local: wrong targetAddressSpace "unknown".] - expected: FAIL - - [https-public to http-local: wrong targetAddressSpace "private".] - expected: FAIL - - [https-public to http-local: wrong targetAddressSpace "public".] - expected: FAIL - - [https-public to http-local: failed preflight.] - expected: FAIL - - [https-public to http-local: success.] - expected: FAIL - - [https-public to http-private: missing targetAddressSpace.] - expected: FAIL - - [https-public to http-private: wrong targetAddressSpace "unknown".] - expected: FAIL - - [https-public to http-private: wrong targetAddressSpace "local".] - expected: FAIL - - [https-public to http-private: wrong targetAddressSpace "public".] - expected: FAIL - - [https-public to http-private: failed preflight.] - expected: FAIL - - [https-public to http-private: success.] - expected: FAIL - - [https-public to http-public: wrong targetAddressSpace "unknown".] - expected: FAIL - - [https-public to http-public: wrong targetAddressSpace "local".] - expected: FAIL - - [https-public to http-public: wrong targetAddressSpace "private".] - expected: FAIL - - [https-public to http-public: not a private network request.] - expected: FAIL - - [https-treat-as-public to http-local: wrong targetAddressSpace "private".] - expected: FAIL - - [https-treat-as-public to http-private: wrong targetAddressSpace "local".] - expected: FAIL - - [https-treat-as-public to http-private: success.] - expected: FAIL diff --git a/tests/wpt/metadata/html/anonymous-iframe/worker-cookies.tentative.https.window.js.ini b/tests/wpt/metadata/html/anonymous-iframe/worker-cookies.tentative.https.window.js.ini new file mode 100644 index 00000000000..1ac26e08597 --- /dev/null +++ b/tests/wpt/metadata/html/anonymous-iframe/worker-cookies.tentative.https.window.js.ini @@ -0,0 +1,21 @@ +[worker-cookies.tentative.https.window.html?worker=shared_worker] + expected: TIMEOUT + [Worker spawned from normal iframe can access global cookies] + expected: TIMEOUT + + [Worker spawned from credentialless iframe can't access global cookies] + expected: NOTRUN + + +[worker-cookies.tentative.https.window.html?worker=service_worker] + expected: TIMEOUT + [Worker spawned from normal iframe can access global cookies] + expected: TIMEOUT + + [Worker spawned from credentialless iframe can't access global cookies] + expected: NOTRUN + + +[worker-cookies.tentative.https.window.html?worker=dedicated_worker] + [Worker spawned from credentialless iframe can't access global cookies] + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini index 6e9f7acf151..c8a3c8f9e68 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/history-traversal/persisted-user-state-restoration/scroll-restoration-fragment-scrolling-cross-origin.html.ini @@ -1,6 +1,6 @@ [scroll-restoration-fragment-scrolling-cross-origin.html] type: testharness - expected: TIMEOUT + expected: ERROR [Manual scroll restoration should take precedent over scrolling to fragment in cross origin navigation] expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/005.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/005.html.ini index f7ee5361549..33efcdbcf48 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/005.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/005.html.ini @@ -1,4 +1,3 @@ [005.html] - expected: TIMEOUT [Link with onclick navigation and href navigation ] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini index dc1144214ef..dd7320bb46e 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-src-aboutblank-navigate-immediately.html.ini @@ -1,9 +1,10 @@ [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: FAIL + expected: NOTRUN [Navigating to a different document with link click] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini index 8ae58f9f1e2..78240a2f463 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/javascript-url-return-value-handling-dynamic.html.ini @@ -16,6 +16,3 @@ [D83D DE0D set in href="" targeting a frame and clicked] expected: FAIL - - [DE0D 0041 set in href="" targeting a frame and clicked] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini index 27889a98fb5..24d2f8ac554 100644 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini +++ b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigate-to-unparseable-url.html.ini @@ -1,6 +1,3 @@ [navigate-to-unparseable-url.html] [location.href setter throws a SyntaxError DOMException for unparseable URLs] expected: FAIL - - [ tag navigate fails for unparseable URLs] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini deleted file mode 100644 index 7dc346632a4..00000000000 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.js.ini +++ /dev/null @@ -1,3 +0,0 @@ -[navigation-unload-same-origin.window.html] - [Same-origin navigation started from unload handler must be ignored] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html.ini b/tests/wpt/metadata/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html.ini deleted file mode 100644 index d993e8dcc42..00000000000 --- a/tests/wpt/metadata/html/browsers/browsing-the-web/read-media/pageload-image-in-popup.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[pageload-image-in-popup.html] - [The document for a standalone media file should have one child in the body.] - expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini new file mode 100644 index 00000000000..4b4820d1729 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/open-close/creating_browsing_context_test_01.html.ini @@ -0,0 +1,3 @@ +[creating_browsing_context_test_01.html] + [first argument: absolute url] + expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/windows/auxiliary-browsing-contexts/opener-setter.html.ini b/tests/wpt/metadata/html/browsers/windows/auxiliary-browsing-contexts/opener-setter.html.ini new file mode 100644 index 00000000000..64c79a60c4a --- /dev/null +++ b/tests/wpt/metadata/html/browsers/windows/auxiliary-browsing-contexts/opener-setter.html.ini @@ -0,0 +1,4 @@ +[opener-setter.html] + expected: TIMEOUT + [Auxiliary browsing context created via `window.open` and setting `window.opener` to `test` should report `test`] + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini b/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini index 5cdcce07c65..2a54f2f8814 100644 --- a/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini +++ b/tests/wpt/metadata/html/canvas/element/manual/drawing-text-to-the-canvas/canvas.2d.disconnected.html.ini @@ -1,2 +1,2 @@ [canvas.2d.disconnected.html] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/canvas/offscreen/transformations/2d.transformation.scale.large.html.ini b/tests/wpt/metadata/html/canvas/offscreen/transformations/2d.transformation.scale.large.html.ini index a2f6ef4c2cb..e6c27b72f74 100644 --- a/tests/wpt/metadata/html/canvas/offscreen/transformations/2d.transformation.scale.large.html.ini +++ b/tests/wpt/metadata/html/canvas/offscreen/transformations/2d.transformation.scale.large.html.ini @@ -1,4 +1,4 @@ [2d.transformation.scale.large.html] + expected: ERROR [scale() with large scale factors works] - expected: FAIL - + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.html.ini b/tests/wpt/metadata/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.html.ini new file mode 100644 index 00000000000..951f84bb1b2 --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.html.ini @@ -0,0 +1,4 @@ +[2d.transformation.setTransform.multiple.html] + expected: ERROR + [OffscreenCanvas test: 2d.transformation.setTransform.multiple] + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.worker.js.ini b/tests/wpt/metadata/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.worker.js.ini new file mode 100644 index 00000000000..1d740cfd1ca --- /dev/null +++ b/tests/wpt/metadata/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.worker.js.ini @@ -0,0 +1,3 @@ +[2d.transformation.setTransform.multiple.worker.html] + [2d] + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini index 841bafc6eca..7df8f9458e9 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html.ini @@ -1,3 +1,4 @@ [iframe_sandbox_popups_escaping-2.html] + expected: CRASH [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini index fe55ddae3f1..eacbe5794ea 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini @@ -1,4 +1,5 @@ [iframe_sandbox_popups_escaping-3.html] type: testharness + expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini index 47b45e65a1c..3cdeb8ebcbc 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini @@ -1,9 +1,3 @@ [non-active-document.html] [DOMParser] expected: FAIL - - [createHTMLDocument] - expected: FAIL - - [ diff --git a/tests/wpt/web-platform-tests/css/selectors/visited-part-crash.html b/tests/wpt/web-platform-tests/css/selectors/visited-part-crash.html new file mode 100644 index 00000000000..f4cb28995b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/visited-part-crash.html @@ -0,0 +1,8 @@ + + + +
    + Test +
    diff --git a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html index bd252282161..0a1d40199e6 100644 --- a/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html +++ b/tests/wpt/web-platform-tests/custom-elements/reactions/HTMLElement.html @@ -3,7 +3,7 @@ Custom Elements: CEReactions on HTMLElement interface - + @@ -23,6 +23,7 @@ testReflectAttribute('tabIndex', 'tabindex', '0', '1', 'tabIndex on HTMLElement' testReflectAttribute('accessKey', 'accesskey', 'a', 'b', 'accessKey on HTMLElement'); testReflectAttributeWithContentValues('draggable', 'draggable', true, 'true', false, 'false', 'draggable on HTMLElement'); testReflectAttributeWithContentValues('spellcheck', 'spellcheck', true, 'true', false, 'false', 'spellcheck on HTMLElement'); +testReflectAttribute('popover', 'popover', 'auto', 'manual', 'popover on HTMLElement'); testNodeDisconnector(function (customElement) { customElement.parentNode.innerText = ''; diff --git a/tests/wpt/web-platform-tests/docs/writing-tests/making-a-testing-plan.md b/tests/wpt/web-platform-tests/docs/writing-tests/making-a-testing-plan.md index eb96f31202e..a4007039ae4 100644 --- a/tests/wpt/web-platform-tests/docs/writing-tests/making-a-testing-plan.md +++ b/tests/wpt/web-platform-tests/docs/writing-tests/making-a-testing-plan.md @@ -382,7 +382,7 @@ that looks on a UNIX-like command line: $ ls fetch api/ DIR_METADATA OWNERS - connection-pool/ h1-parsing/ private-network-access/ + connection-pool/ h1-parsing/ local-network-access/ content-encoding/ http-cache/ range/ content-length/ images/ README.md content-type/ metadata/ redirect-navigate/ diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/META.yml b/tests/wpt/web-platform-tests/fetch/local-network-access/META.yml similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/META.yml rename to tests/wpt/web-platform-tests/fetch/local-network-access/META.yml diff --git a/tests/wpt/web-platform-tests/fetch/local-network-access/README.md b/tests/wpt/web-platform-tests/fetch/local-network-access/README.md new file mode 100644 index 00000000000..8995e3d7ef6 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/local-network-access/README.md @@ -0,0 +1,10 @@ +# Local Network Access tests + +This directory contains tests for Local Network Access' integration with +the Fetch specification. + +See also: + +* [The specification](https://wicg.github.io/local-network-access/) +* [The repository](https://github.com/WICG/local-network-access/) +* [Open issues](https://github.com/WICG/local-network-access/issues/) diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/fetch-from-treat-as-public.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/fetch-from-treat-as-public.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/fetch-from-treat-as-public.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/fetch-from-treat-as-public.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/fetch.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/fetch.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/fetch.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/fetch.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/fetch.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/fetch.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/fetch.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/fetch.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/iframe.tentative.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/iframe.tentative.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/iframe.tentative.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/iframe.tentative.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/iframe.tentative.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/iframe.tentative.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/iframe.tentative.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/iframe.tentative.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/mixed-content-fetch.tentative.https.window.js similarity index 77% rename from tests/wpt/web-platform-tests/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/mixed-content-fetch.tentative.https.window.js index 54485dc7047..6f7d765617c 100644 --- a/tests/wpt/web-platform-tests/fetch/private-network-access/mixed-content-fetch.tentative.https.window.js +++ b/tests/wpt/web-platform-tests/fetch/local-network-access/mixed-content-fetch.tentative.https.window.js @@ -1,10 +1,10 @@ // META: script=/common/utils.js // META: script=resources/support.sub.js // -// Spec: https://wicg.github.io/private-network-access +// Spec: https://wicg.github.io/local-network-access // // These tests verify that secure contexts can fetch non-secure subresources -// from more private address spaces, avoiding mixed context checks, as long as +// from more local address spaces, avoiding mixed context checks, as long as // they specify a valid `targetAddressSpace` fetch option that matches the // target server's address space. @@ -16,9 +16,9 @@ setup(() => { // Given `addressSpace`, returns the other three possible IP address spaces. function otherAddressSpaces(addressSpace) { switch (addressSpace) { - case "local": return ["unknown", "private", "public"]; - case "private": return ["unknown", "local", "public"]; - case "public": return ["unknown", "local", "private"]; + case "loopback": return ["unknown", "local", "public"]; + case "local": return ["unknown", "loopback", "public"]; + case "public": return ["unknown", "loopback", "local"]; } } @@ -169,48 +169,66 @@ function makeNoBypassTests({ source, target }) { }, fetchOptions: { targetAddressSpace: correctAddressSpace }, expected: FetchTestResult.FAILURE, - }), prefix + 'not a private network request.'); + }), prefix + 'not a local network request.'); } +// Source: loopback secure context. +// +// Fetches to the loopback and local address spaces cannot use +// `targetAddressSpace` to bypass mixed content, as they are not otherwise +// blocked by Local Network Access. + +makeNoBypassTests({ source: "loopback", target: "loopback" }); +makeNoBypassTests({ source: "loopback", target: "local" }); +makeNoBypassTests({ source: "loopback", target: "public" }); + // Source: local secure context. // -// Fetches to the local and private address spaces cannot use -// `targetAddressSpace` to bypass mixed content, as they are not otherwise -// blocked by Private Network Access. - -makeNoBypassTests({ source: "local", target: "local" }); -makeNoBypassTests({ source: "local", target: "private" }); -makeNoBypassTests({ source: "local", target: "public" }); - -// Source: private secure context. -// -// Fetches to the local address space requires the right `targetAddressSpace` +// Fetches to the loopback address space requires the right `targetAddressSpace` // option, as well as a successful preflight response carrying a PNA-specific // header. // -// Fetches to the private address space cannot use `targetAddressSpace` to -// bypass mixed content, as they are not otherwise blocked by Private Network +// Fetches to the local address space cannot use `targetAddressSpace` to +// bypass mixed content, as they are not otherwise blocked by Local Network // Access. -makeTests({ source: "private", target: "local" }); +makeTests({ source: "local", target: "loopback" }); -makeNoBypassTests({ source: "private", target: "private" }); -makeNoBypassTests({ source: "private", target: "public" }); +makeNoBypassTests({ source: "local", target: "local" }); +makeNoBypassTests({ source: "local", target: "public" }); // Source: public secure context. // -// Fetches to the local and private address spaces require the right +// Fetches to the loopback and local address spaces require the right // `targetAddressSpace` option, as well as a successful preflight response // carrying a PNA-specific header. +makeTests({ source: "public", target: "loopback" }); makeTests({ source: "public", target: "local" }); -makeTests({ source: "public", target: "private" }); makeNoBypassTests({ source: "public", target: "public" }); -// These tests verify that documents fetched from the `local` address space yet -// carrying the `treat-as-public-address` CSP directive are treated as if they -// had been fetched from the `public` address space. +// These tests verify that documents fetched from the `loopback` address space +// yet carrying the `treat-as-public-address` CSP directive are treated as if +// they had been fetched from the `public` address space. + +promise_test_parallel( + t => fetchTest(t, { + source: { + server: Server.HTTPS_LOCAL, + treatAsPublic: true, + }, + target: { + server: Server.HTTP_LOCAL, + behavior: { + preflight: PreflightBehavior.optionalSuccess(token()), + response: ResponseBehavior.allowCrossOrigin(), + }, + }, + fetchOptions: {targetAddressSpace: 'local'}, + expected: FetchTestResult.FAILURE, + }), + 'https-treat-as-public to http-loopback: wrong targetAddressSpace "local".'); promise_test_parallel(t => fetchTest(t, { source: { @@ -224,9 +242,9 @@ promise_test_parallel(t => fetchTest(t, { response: ResponseBehavior.allowCrossOrigin(), }, }, - fetchOptions: { targetAddressSpace: "private" }, - expected: FetchTestResult.FAILURE, -}), 'https-treat-as-public to http-local: wrong targetAddressSpace "private".'); + fetchOptions: { targetAddressSpace: "loopback" }, + expected: FetchTestResult.SUCCESS, +}), "https-treat-as-public to http-loopback: success."); promise_test_parallel(t => fetchTest(t, { source: { @@ -234,44 +252,28 @@ promise_test_parallel(t => fetchTest(t, { treatAsPublic: true, }, target: { - server: Server.HTTP_LOCAL, + server: Server.HTTP_PRIVATE, behavior: { - preflight: PreflightBehavior.optionalSuccess(token()), + preflight: PreflightBehavior.success(token()), + response: ResponseBehavior.allowCrossOrigin(), + }, + }, + fetchOptions: { targetAddressSpace: "loopback" }, + expected: FetchTestResult.FAILURE, +}), 'https-treat-as-public to http-local: wrong targetAddressSpace "loopback".'); + +promise_test_parallel(t => fetchTest(t, { + source: { + server: Server.HTTPS_LOCAL, + treatAsPublic: true, + }, + target: { + server: Server.HTTP_PRIVATE, + behavior: { + preflight: PreflightBehavior.success(token()), response: ResponseBehavior.allowCrossOrigin(), }, }, fetchOptions: { targetAddressSpace: "local" }, expected: FetchTestResult.SUCCESS, }), "https-treat-as-public to http-local: success."); - -promise_test_parallel(t => fetchTest(t, { - source: { - server: Server.HTTPS_LOCAL, - treatAsPublic: true, - }, - target: { - server: Server.HTTP_PRIVATE, - behavior: { - preflight: PreflightBehavior.success(token()), - response: ResponseBehavior.allowCrossOrigin(), - }, - }, - fetchOptions: { targetAddressSpace: "local" }, - expected: FetchTestResult.FAILURE, -}), 'https-treat-as-public to http-private: wrong targetAddressSpace "local".'); - -promise_test_parallel(t => fetchTest(t, { - source: { - server: Server.HTTPS_LOCAL, - treatAsPublic: true, - }, - target: { - server: Server.HTTP_PRIVATE, - behavior: { - preflight: PreflightBehavior.success(token()), - response: ResponseBehavior.allowCrossOrigin(), - }, - }, - fetchOptions: { targetAddressSpace: "private" }, - expected: FetchTestResult.SUCCESS, -}), "https-treat-as-public to http-private: success."); diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/nested-worker.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/nested-worker.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/nested-worker.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/nested-worker.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/nested-worker.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/nested-worker.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/nested-worker.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/nested-worker.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/preflight-cache.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/preflight-cache.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/preflight-cache.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/preflight-cache.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/redirect.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/redirect.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/redirect.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/redirect.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/executor.html b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/executor.html similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/executor.html rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/executor.html diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/fetcher.html b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/fetcher.html similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/fetcher.html rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/fetcher.html diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/fetcher.js b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/fetcher.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/fetcher.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/fetcher.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/iframed.html b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/iframed.html similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/iframed.html rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/iframed.html diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/iframer.html b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/iframer.html similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/iframer.html rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/iframer.html diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/preflight.py b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/preflight.py similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/preflight.py rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/preflight.py diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/service-worker-bridge.html b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/service-worker-bridge.html similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/service-worker-bridge.html rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/service-worker-bridge.html diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/service-worker.js b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/service-worker.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/service-worker.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/service-worker.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/shared-fetcher.js b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/shared-fetcher.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/shared-fetcher.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/shared-fetcher.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/shared-worker-blob-fetcher.html b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/shared-worker-blob-fetcher.html similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/shared-worker-blob-fetcher.html rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/shared-worker-blob-fetcher.html diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/shared-worker-fetcher.html b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/shared-worker-fetcher.html similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/shared-worker-fetcher.html rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/shared-worker-fetcher.html diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/socket-opener.html b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/socket-opener.html similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/socket-opener.html rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/socket-opener.html diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/support.sub.js b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/support.sub.js similarity index 97% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/support.sub.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/support.sub.js index 210184ec4b6..c07fd2c2ace 100644 --- a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/support.sub.js +++ b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/support.sub.js @@ -75,20 +75,20 @@ async function postMessageAndAwaitReply(target, message) { // Maps protocol (without the trailing colon) and address space to port. const SERVER_PORTS = { "http": { - "local": {{ports[http][0]}}, - "private": {{ports[http-private][0]}}, + "loopback": {{ports[http][0]}}, + "local": {{ports[http-private][0]}}, "public": {{ports[http-public][0]}}, }, "https": { - "local": {{ports[https][0]}}, - "private": {{ports[https-private][0]}}, + "loopback": {{ports[https][0]}}, + "local": {{ports[https-private][0]}}, "public": {{ports[https-public][0]}}, }, "ws": { - "local": {{ports[ws][0]}}, + "loopback": {{ports[ws][0]}}, }, "wss": { - "local": {{ports[wss][0]}}, + "loopback": {{ports[wss][0]}}, }, }; @@ -126,14 +126,14 @@ class Server { }; } - static HTTP_LOCAL = Server.get("http", "local"); - static HTTP_PRIVATE = Server.get("http", "private"); + static HTTP_LOCAL = Server.get("http", "loopback"); + static HTTP_PRIVATE = Server.get("http", "local"); static HTTP_PUBLIC = Server.get("http", "public"); - static HTTPS_LOCAL = Server.get("https", "local"); - static HTTPS_PRIVATE = Server.get("https", "private"); + static HTTPS_LOCAL = Server.get("https", "loopback"); + static HTTPS_PRIVATE = Server.get("https", "local"); static HTTPS_PUBLIC = Server.get("https", "public"); - static WS_LOCAL = Server.get("ws", "local"); - static WSS_LOCAL = Server.get("wss", "local"); + static WS_LOCAL = Server.get("ws", "loopback"); + static WSS_LOCAL = Server.get("wss", "loopback"); }; // Resolves a URL relative to the current location, returning an absolute URL. diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/worker-blob-fetcher.html b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/worker-blob-fetcher.html similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/worker-blob-fetcher.html rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/worker-blob-fetcher.html diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/worker-fetcher.html b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/worker-fetcher.html similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/worker-fetcher.html rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/worker-fetcher.html diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/worker-fetcher.js b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/worker-fetcher.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/worker-fetcher.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/worker-fetcher.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/resources/xhr-sender.html b/tests/wpt/web-platform-tests/fetch/local-network-access/resources/xhr-sender.html similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/resources/xhr-sender.html rename to tests/wpt/web-platform-tests/fetch/local-network-access/resources/xhr-sender.html diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/service-worker-background-fetch.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/service-worker-background-fetch.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/service-worker-background-fetch.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/service-worker-background-fetch.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/service-worker-fetch.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/service-worker-fetch.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/service-worker-fetch.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/service-worker-fetch.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/service-worker-update.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/service-worker-update.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/service-worker-update.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/service-worker-update.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/service-worker.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/service-worker.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/service-worker.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/service-worker.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/shared-worker-blob-fetch.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/shared-worker-blob-fetch.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/shared-worker-blob-fetch.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/shared-worker-blob-fetch.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/shared-worker-blob-fetch.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/shared-worker-blob-fetch.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/shared-worker-blob-fetch.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/shared-worker-blob-fetch.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/shared-worker-fetch.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/shared-worker-fetch.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/shared-worker-fetch.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/shared-worker-fetch.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/shared-worker-fetch.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/shared-worker-fetch.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/shared-worker-fetch.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/shared-worker-fetch.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/shared-worker.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/shared-worker.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/shared-worker.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/shared-worker.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/shared-worker.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/shared-worker.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/shared-worker.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/shared-worker.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/websocket.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/websocket.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/websocket.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/websocket.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/websocket.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/websocket.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/websocket.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/websocket.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/worker-blob-fetch.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/worker-blob-fetch.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/worker-blob-fetch.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/worker-blob-fetch.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/worker-fetch.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/worker-fetch.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/worker-fetch.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/worker-fetch.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/worker-fetch.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/worker-fetch.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/worker-fetch.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/worker-fetch.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/worker.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/worker.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/worker.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/worker.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/worker.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/worker.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/worker.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/worker.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/xhr-from-treat-as-public.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/xhr-from-treat-as-public.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/xhr-from-treat-as-public.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/xhr-from-treat-as-public.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/xhr.https.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/xhr.https.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/xhr.https.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/xhr.https.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/xhr.window.js b/tests/wpt/web-platform-tests/fetch/local-network-access/xhr.window.js similarity index 100% rename from tests/wpt/web-platform-tests/fetch/private-network-access/xhr.window.js rename to tests/wpt/web-platform-tests/fetch/local-network-access/xhr.window.js diff --git a/tests/wpt/web-platform-tests/fetch/private-network-access/README.md b/tests/wpt/web-platform-tests/fetch/private-network-access/README.md deleted file mode 100644 index a69aab48723..00000000000 --- a/tests/wpt/web-platform-tests/fetch/private-network-access/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Private Network Access tests - -This directory contains tests for Private Network Access' integration with -the Fetch specification. - -See also: - -* [The specification](https://wicg.github.io/private-network-access/) -* [The repository](https://github.com/WICG/private-network-access/) -* [Open issues](https://github.com/WICG/private-network-access/issues/) diff --git a/tests/wpt/web-platform-tests/fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js b/tests/wpt/web-platform-tests/fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js index 7f244bc02aa..1b7fcda35bf 100644 --- a/tests/wpt/web-platform-tests/fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js +++ b/tests/wpt/web-platform-tests/fs/FileSystemFileHandle-sync-access-handle-writable-lock.https.tentative.worker.js @@ -7,6 +7,7 @@ directory_test(async (t, root_dir) => { const fileHandle = await root_dir.getFileHandle('OPFS.test', {create: true}); const syncHandle1 = await fileHandle.createSyncAccessHandle(); + t.add_cleanup(() => syncHandle1.close()); await promise_rejects_dom( t, 'NoModificationAllowedError', fileHandle.createSyncAccessHandle()); @@ -23,6 +24,7 @@ directory_test(async (t, root_dir) => { t.add_cleanup(() => fooSyncHandle.close()); const barSyncHandle1 = await barFileHandle.createSyncAccessHandle(); + t.add_cleanup(() => barSyncHandle1.close()); await promise_rejects_dom( t, 'NoModificationAllowedError', barFileHandle.createSyncAccessHandle()); @@ -60,8 +62,10 @@ directory_test(async (t, root_dir) => { const fileHandle = await root_dir.getFileHandle('OPFS.test', {create: true}); const syncHandle = await fileHandle.createSyncAccessHandle(); + t.add_cleanup(() => { syncHandle.close(); }); await promise_rejects_dom( - t, 'NoModificationAllowedError', fileHandle.createWritable()); + t, 'NoModificationAllowedError', cleanup_writable(t, fileHandle.createWritable())); + syncHandle.close(); const writable = await fileHandle.createWritable(); await writable.close(); diff --git a/tests/wpt/web-platform-tests/html/anonymous-iframe/worker-cookies.tentative.https.window.js b/tests/wpt/web-platform-tests/html/anonymous-iframe/worker-cookies.tentative.https.window.js new file mode 100644 index 00000000000..4c29983c2b2 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/anonymous-iframe/worker-cookies.tentative.https.window.js @@ -0,0 +1,69 @@ +// META: timeout=long +// META: variant=?worker=dedicated_worker +// META: variant=?worker=shared_worker +// META: variant=?worker=service_worker +// META: script=/common/get-host-info.sub.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=/html/cross-origin-embedder-policy/credentialless/resources/common.js +// META: script=./resources/common.js + +// Execute the same set of tests for every type of worker. +// - DedicatedWorkers +// - SharedWorkers +// - ServiceWorkers. +const params = new URLSearchParams(document.location.search); +const worker_param = params.get("worker") || "dedicated_worker"; + +const cookie_key = token(); +const cookie_value = "cookie_value"; +const cookie_origin = get_host_info().HTTPS_REMOTE_ORIGIN; + +// Create worker spawned from `context` and return its uuid. +const workerFrom = context => { + const reply = token(); + send(context, ` + for(deps of [ + "/common/utils.js", + "/html/cross-origin-embedder-policy/credentialless/resources/common.js", + ]) { + await new Promise(resolve => { + const script = document.createElement("script"); + script.src = deps; + script.onload = resolve; + document.body.appendChild(script); + }); + } + + const worker_constructor = environments["${worker_param}"]; + const headers = ""; + const [worker, error] = worker_constructor(headers); + send("${reply}", worker); + `); + return receive(reply); +}; + +// Set a cookie from a top-level document. +promise_test(async test => { + await setCookie(cookie_origin, cookie_key, cookie_value); +}, "set cookies"); + +// Control: iframe is not credentialless. The worker can access cookies. +promise_test(async test => { + const headers = token(); + send(await workerFrom(newIframe(cookie_origin)), ` + fetch("${showRequestHeaders(cookie_origin, headers)}"); + `); + const cookie = parseCookies(JSON.parse(await receive(headers))); + assert_equals(cookie[cookie_key], cookie_value) +}, "Worker spawned from normal iframe can access global cookies"); + +// Experiment: iframe is credentialless. +promise_test(async test => { + const headers = token(); + send(await workerFrom(newIframeCredentialless(cookie_origin)), ` + fetch("${showRequestHeaders(cookie_origin, headers)}"); + `); + const cookie = parseCookies(JSON.parse(await receive(headers))); + assert_equals(cookie[cookie_key], undefined) +}, "Worker spawned from credentialless iframe can't access global cookies"); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/transformations/2d.transformation.scale.zero.html b/tests/wpt/web-platform-tests/html/canvas/element/transformations/2d.transformation.scale.zero.html index 4ff7397ae8c..f495ee2e6a0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/transformations/2d.transformation.scale.zero.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/transformations/2d.transformation.scale.zero.html @@ -36,8 +36,6 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.restore(); -canvas.toDataURL(); - _assertPixel(canvas, 50,25, 0,255,0,255); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.order.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.order.html index b1308035936..83815f367b7 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.order.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.order.html @@ -15,18 +15,21 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.scale(2, 1); ctx.rotate(Math.PI / 2); ctx.fillStyle = '#0f0'; ctx.fillRect(0, -50, 50, 50); _assertPixel(canvas, 75,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.order.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.order.worker.js index 7ac61067b4b..d00fe230efb 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.order.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.order.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.scale(2, 1); ctx.rotate(Math.PI / 2); ctx.fillStyle = '#0f0'; diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.direction.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.direction.html index 0a98c7e65f9..c20608f81c8 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.direction.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.direction.html @@ -15,17 +15,20 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.rotate(Math.PI / 2); ctx.fillStyle = '#0f0'; ctx.fillRect(0, -100, 50, 100); _assertPixel(canvas, 50,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.direction.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.direction.worker.js index 465d3b67907..8506937583e 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.direction.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.direction.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.rotate(Math.PI / 2); ctx.fillStyle = '#0f0'; ctx.fillRect(0, -100, 50, 100); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.nonfinite.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.nonfinite.html index 0f2227a4e5c..bbc294a24fe 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.nonfinite.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.nonfinite.html @@ -15,20 +15,25 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.translate(100, 10); ctx.rotate(Infinity); ctx.rotate(-Infinity); ctx.rotate(NaN); + ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -10, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.nonfinite.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.nonfinite.worker.js index 56a04d874e8..2c892a561b2 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.nonfinite.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.nonfinite.worker.js @@ -18,12 +18,15 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.translate(100, 10); ctx.rotate(Infinity); ctx.rotate(-Infinity); ctx.rotate(NaN); + ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -10, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.radians.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.radians.html index 8a78dddd7f8..75121e39d7f 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.radians.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.radians.html @@ -15,17 +15,20 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.rotate(Math.PI); // should fail obviously if this is 3.1 degrees ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -50, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.radians.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.radians.worker.js index 9780e68a02f..8c2fdd8ab08 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.radians.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.radians.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.rotate(Math.PI); // should fail obviously if this is 3.1 degrees ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -50, 100, 50); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrap.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrap.html index 7711a8c1404..1f9eb838c81 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrap.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrap.html @@ -15,13 +15,15 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.rotate(Math.PI * (1 + 4096)); // == pi (mod 2*pi) // We need about pi +/- 0.001 in order to get correct-looking results // 32-bit floats can store pi*4097 with precision 2^-10, so that should @@ -31,6 +33,7 @@ ctx.fillRect(-100, -50, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255); _assertPixel(canvas, 98,2, 0,255,0,255); _assertPixel(canvas, 98,47, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrap.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrap.worker.js index db9fbd43bc1..579a1b6dd68 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrap.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrap.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.rotate(Math.PI * (1 + 4096)); // == pi (mod 2*pi) // We need about pi +/- 0.001 in order to get correct-looking results // 32-bit floats can store pi*4097 with precision 2^-10, so that should diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrapnegative.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrapnegative.html index 49959dac022..c06f6453155 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrapnegative.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrapnegative.html @@ -15,19 +15,22 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.rotate(-Math.PI * (1 + 4096)); ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -50, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255); _assertPixel(canvas, 98,2, 0,255,0,255); _assertPixel(canvas, 98,47, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrapnegative.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrapnegative.worker.js index 7f93f654582..cce91071210 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrapnegative.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.wrapnegative.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.rotate(-Math.PI * (1 + 4096)); ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -50, 100, 50); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.zero.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.zero.html index 2255b9973dd..0101fa27c58 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.zero.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.zero.html @@ -15,17 +15,20 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.rotate(0); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.zero.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.zero.worker.js index 10e00c4656a..1ad0aa59853 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.zero.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.rotate.zero.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.rotate(0); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.basic.html index c78ac79f5ab..5c70438ba16 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.basic.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.basic.html @@ -15,17 +15,20 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.scale(2, 4); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 50, 12.5); _assertPixel(canvas, 90,40, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.basic.worker.js index 39b52d57b5f..73be61007a5 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.basic.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.basic.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.scale(2, 4); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 50, 12.5); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.large.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.large.html index a67d05eb2c2..8974545500a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.large.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.large.html @@ -15,17 +15,20 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.scale(1e5, 1e5); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 1, 1); _assertPixel(canvas, 50,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.large.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.large.worker.js index 1293cce196f..30af9631e6c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.large.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.large.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.scale(1e5, 1e5); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 1, 1); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.multiple.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.multiple.html index 717f3d305a1..b07acf15ce6 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.multiple.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.multiple.html @@ -15,18 +15,21 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.scale(Math.sqrt(2), Math.sqrt(2)); ctx.scale(Math.sqrt(2), Math.sqrt(2)); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 50, 25); _assertPixel(canvas, 90,40, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.multiple.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.multiple.worker.js index c5a38207ea0..267a7df9441 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.multiple.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.multiple.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.scale(Math.sqrt(2), Math.sqrt(2)); ctx.scale(Math.sqrt(2), Math.sqrt(2)); ctx.fillStyle = '#0f0'; diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.negative.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.negative.html index fbcec5d763a..b516c1154f4 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.negative.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.negative.html @@ -15,18 +15,21 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.save(); ctx.scale(-1, 1); ctx.fillStyle = '#0f0'; ctx.fillRect(-50, 0, 50, 50); ctx.restore(); + ctx.save(); ctx.scale(1, -1); ctx.fillStyle = '#0f0'; @@ -34,6 +37,7 @@ ctx.fillRect(50, -50, 50, 50); ctx.restore(); _assertPixel(canvas, 25,25, 0,255,0,255); _assertPixel(canvas, 75,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.negative.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.negative.worker.js index a5344a9a717..0e68f7e8d8c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.negative.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.negative.worker.js @@ -18,11 +18,13 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.save(); ctx.scale(-1, 1); ctx.fillStyle = '#0f0'; ctx.fillRect(-50, 0, 50, 50); ctx.restore(); + ctx.save(); ctx.scale(1, -1); ctx.fillStyle = '#0f0'; diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.nonfinite.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.nonfinite.html index ac38bc1fa46..3d9c75a0dc0 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.nonfinite.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.nonfinite.html @@ -15,13 +15,15 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.translate(100, 10); ctx.scale(Infinity, 0.1); ctx.scale(-Infinity, 0.1); @@ -30,9 +32,12 @@ ctx.scale(0.1, Infinity); ctx.scale(0.1, -Infinity); ctx.scale(0.1, NaN); ctx.scale(Infinity, Infinity); + ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -10, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.nonfinite.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.nonfinite.worker.js index 95e9922b69b..67c5c104481 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.nonfinite.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.nonfinite.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.translate(100, 10); ctx.scale(Infinity, 0.1); ctx.scale(-Infinity, 0.1); @@ -26,8 +27,10 @@ ctx.scale(0.1, Infinity); ctx.scale(0.1, -Infinity); ctx.scale(0.1, NaN); ctx.scale(Infinity, Infinity); + ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -10, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.zero.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.zero.html index 9eae3b1db33..4b664125c22 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.zero.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.zero.html @@ -15,26 +15,31 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + ctx.save(); ctx.translate(50, 0); ctx.scale(0, 1); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.restore(); + ctx.save(); ctx.translate(0, 25); ctx.scale(1, 0); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.restore(); + _assertPixel(canvas, 50,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.zero.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.zero.worker.js index 0f8dad04422..dc52323bc23 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.zero.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.scale.zero.worker.js @@ -18,18 +18,21 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); + ctx.save(); ctx.translate(50, 0); ctx.scale(0, 1); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.restore(); + ctx.save(); ctx.translate(0, 25); ctx.scale(1, 0); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); ctx.restore(); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.html index f8dfb048812..e28710858b1 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.html @@ -15,18 +15,22 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.setTransform(1/2,0, 0,1/2, 0,0); +ctx.setTransform(); ctx.setTransform(2,0, 0,2, 0,0); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 50, 25); _assertPixel(canvas, 75,35, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.worker.js index 9d01c1302ec..b6b004601fb 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.multiple.worker.js @@ -18,7 +18,9 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.setTransform(1/2,0, 0,1/2, 0,0); +ctx.setTransform(); ctx.setTransform(2,0, 0,2, 0,0); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 50, 25); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.nonfinite.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.nonfinite.html index fbed341a04a..03c1b74579f 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.nonfinite.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.nonfinite.html @@ -15,13 +15,15 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.translate(100, 10); ctx.setTransform(Infinity, 0, 0, 0, 0, 0); ctx.setTransform(-Infinity, 0, 0, 0, 0, 0); @@ -98,9 +100,12 @@ ctx.setTransform(0, 0, 0, Infinity, Infinity, 0); ctx.setTransform(0, 0, 0, Infinity, Infinity, Infinity); ctx.setTransform(0, 0, 0, Infinity, 0, Infinity); ctx.setTransform(0, 0, 0, 0, Infinity, Infinity); + ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -10, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.nonfinite.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.nonfinite.worker.js index be7e055a853..bd48262ca7d 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.nonfinite.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.nonfinite.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.translate(100, 10); ctx.setTransform(Infinity, 0, 0, 0, 0, 0); ctx.setTransform(-Infinity, 0, 0, 0, 0, 0); @@ -94,8 +95,10 @@ ctx.setTransform(0, 0, 0, Infinity, Infinity, 0); ctx.setTransform(0, 0, 0, Infinity, Infinity, Infinity); ctx.setTransform(0, 0, 0, Infinity, 0, Infinity); ctx.setTransform(0, 0, 0, 0, Infinity, Infinity); + ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -10, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.skewed.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.skewed.html index 40fa8015d4c..c49d9d8a298 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.skewed.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.skewed.html @@ -15,11 +15,12 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { // Create green with a red square ring inside it ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); @@ -27,6 +28,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(20, 10, 60, 30); ctx.fillStyle = '#0f0'; ctx.fillRect(40, 20, 20, 10); + // Draw a skewed shape to fill that gap, to make sure it is aligned correctly ctx.setTransform(1,4, 2,3, 5,6); // Post-transform coordinates: @@ -48,6 +50,7 @@ _assertPixel(canvas, 39,19, 0,255,0,255); _assertPixel(canvas, 61,19, 0,255,0,255); _assertPixel(canvas, 39,31, 0,255,0,255); _assertPixel(canvas, 61,31, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.skewed.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.skewed.worker.js index 6490f9b7094..6f4b4769b61 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.skewed.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.setTransform.skewed.worker.js @@ -23,6 +23,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(20, 10, 60, 30); ctx.fillStyle = '#0f0'; ctx.fillRect(40, 20, 20, 10); + // Draw a skewed shape to fill that gap, to make sure it is aligned correctly ctx.setTransform(1,4, 2,3, 5,6); // Post-transform coordinates: diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.identity.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.identity.html index 92753bc9e3e..1efa306707c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.identity.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.identity.html @@ -15,17 +15,20 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.transform(1,0, 0,1, 0,0); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.identity.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.identity.worker.js index 99ac58d49d3..51a11ee03de 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.identity.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.identity.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.transform(1,0, 0,1, 0,0); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.multiply.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.multiply.html index f69fa4330af..05a1e7e5ead 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.multiply.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.multiply.html @@ -15,18 +15,21 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.transform(1,2, 3,4, 5,6); ctx.transform(-2,1, 3/2,-1/2, 1,-2); ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); _assertPixel(canvas, 50,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.multiply.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.multiply.worker.js index 1a0e702a05b..61a5f052dc7 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.multiply.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.multiply.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.transform(1,2, 3,4, 5,6); ctx.transform(-2,1, 3/2,-1/2, 1,-2); ctx.fillStyle = '#0f0'; diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.nonfinite.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.nonfinite.html index 6e679341d5d..b81bda463bd 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.nonfinite.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.nonfinite.html @@ -15,13 +15,15 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.translate(100, 10); ctx.transform(Infinity, 0, 0, 0, 0, 0); ctx.transform(-Infinity, 0, 0, 0, 0, 0); @@ -98,9 +100,12 @@ ctx.transform(0, 0, 0, Infinity, Infinity, 0); ctx.transform(0, 0, 0, Infinity, Infinity, Infinity); ctx.transform(0, 0, 0, Infinity, 0, Infinity); ctx.transform(0, 0, 0, 0, Infinity, Infinity); + ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -10, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.nonfinite.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.nonfinite.worker.js index d596fc9744b..ee675151b3a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.nonfinite.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.nonfinite.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.translate(100, 10); ctx.transform(Infinity, 0, 0, 0, 0, 0); ctx.transform(-Infinity, 0, 0, 0, 0, 0); @@ -94,8 +95,10 @@ ctx.transform(0, 0, 0, Infinity, Infinity, 0); ctx.transform(0, 0, 0, Infinity, Infinity, Infinity); ctx.transform(0, 0, 0, Infinity, 0, Infinity); ctx.transform(0, 0, 0, 0, Infinity, Infinity); + ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -10, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.skewed.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.skewed.html index 78e1252c67c..9cb6dfcc52e 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.skewed.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.skewed.html @@ -15,11 +15,12 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { // Create green with a red square ring inside it ctx.fillStyle = '#0f0'; ctx.fillRect(0, 0, 100, 50); @@ -27,6 +28,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(20, 10, 60, 30); ctx.fillStyle = '#0f0'; ctx.fillRect(40, 20, 20, 10); + // Draw a skewed shape to fill that gap, to make sure it is aligned correctly ctx.transform(1,4, 2,3, 5,6); // Post-transform coordinates: @@ -48,6 +50,7 @@ _assertPixel(canvas, 39,19, 0,255,0,255); _assertPixel(canvas, 61,19, 0,255,0,255); _assertPixel(canvas, 39,31, 0,255,0,255); _assertPixel(canvas, 61,31, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.skewed.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.skewed.worker.js index 46416bb9570..638adc14c44 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.skewed.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.transform.skewed.worker.js @@ -23,6 +23,7 @@ ctx.fillStyle = '#f00'; ctx.fillRect(20, 10, 60, 30); ctx.fillStyle = '#0f0'; ctx.fillRect(40, 20, 20, 10); + // Draw a skewed shape to fill that gap, to make sure it is aligned correctly ctx.transform(1,4, 2,3, 5,6); // Post-transform coordinates: diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.basic.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.basic.html index 8144ab0cc1b..51a7527b5cc 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.basic.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.basic.html @@ -15,17 +15,20 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.translate(100, 50); ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -50, 100, 50); _assertPixel(canvas, 90,40, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.basic.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.basic.worker.js index 695aff37da5..11e8bd897b4 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.basic.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.basic.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.translate(100, 50); ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -50, 100, 50); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.nonfinite.html b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.nonfinite.html index 4127a7a157e..010b28f3c6a 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.nonfinite.html +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.nonfinite.html @@ -15,13 +15,15 @@ var t_pass = t.done.bind(t); var t_fail = t.step_func(function(reason) { throw reason; }); -t.step(function() { +t.step(async function() { var canvas = new OffscreenCanvas(100, 50); var ctx = canvas.getContext('2d'); +await (function(canvas, ctx) { ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.translate(100, 10); ctx.translate(Infinity, 0.1); ctx.translate(-Infinity, 0.1); @@ -30,9 +32,12 @@ ctx.translate(0.1, Infinity); ctx.translate(0.1, -Infinity); ctx.translate(0.1, NaN); ctx.translate(Infinity, Infinity); + ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -10, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); +})(canvas, ctx); t.done(); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.nonfinite.worker.js b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.nonfinite.worker.js index 84b52a203b6..c3ff3a31a8c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.nonfinite.worker.js +++ b/tests/wpt/web-platform-tests/html/canvas/offscreen/transformations/2d.transformation.translate.nonfinite.worker.js @@ -18,6 +18,7 @@ var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); + ctx.translate(100, 10); ctx.translate(Infinity, 0.1); ctx.translate(-Infinity, 0.1); @@ -26,8 +27,10 @@ ctx.translate(0.1, Infinity); ctx.translate(0.1, -Infinity); ctx.translate(0.1, NaN); ctx.translate(Infinity, Infinity); + ctx.fillStyle = '#0f0'; ctx.fillRect(-100, -10, 100, 50); + _assertPixel(canvas, 50,25, 0,255,0,255); t.done(); diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/transformations.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/transformations.yaml similarity index 99% rename from tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/transformations.yaml rename to tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/transformations.yaml index 876c48f849c..0d2265be7aa 100644 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/element/transformations.yaml +++ b/tests/wpt/web-platform-tests/html/canvas/tools/yaml-new/transformations.yaml @@ -44,8 +44,6 @@ ctx.fillRect(0, 0, 100, 50); ctx.restore(); - canvas.toDataURL(); - @assert pixel 50,25 == 0,255,0,255; expected: green diff --git a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/transformations.yaml b/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/transformations.yaml deleted file mode 100644 index efc00222bfc..00000000000 --- a/tests/wpt/web-platform-tests/html/canvas/tools/yaml/offscreen/transformations.yaml +++ /dev/null @@ -1,320 +0,0 @@ -- name: 2d.transformation.order - desc: Transformations are applied in the right order - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.scale(2, 1); - ctx.rotate(Math.PI / 2); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, -50, 50, 50); - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.scale.basic - desc: scale() works - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.scale(2, 4); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 50, 12.5); - @assert pixel 90,40 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.scale.zero - desc: scale() with a scale factor of zero works - code: | - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.save(); - ctx.translate(50, 0); - ctx.scale(0, 1); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.restore(); - ctx.save(); - ctx.translate(0, 25); - ctx.scale(1, 0); - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.restore(); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.scale.negative - desc: scale() with negative scale factors works - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.save(); - ctx.scale(-1, 1); - ctx.fillStyle = '#0f0'; - ctx.fillRect(-50, 0, 50, 50); - ctx.restore(); - ctx.save(); - ctx.scale(1, -1); - ctx.fillStyle = '#0f0'; - ctx.fillRect(50, -50, 50, 50); - ctx.restore(); - @assert pixel 25,25 == 0,255,0,255; - @assert pixel 75,25 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.scale.large - desc: scale() with large scale factors works - notes: Not really that large at all, but it hits the limits in Firefox. - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.scale(1e5, 1e5); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 1, 1); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.scale.nonfinite - desc: scale() with Infinity/NaN is ignored - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.translate(100, 10); - @nonfinite ctx.scale(<0.1 Infinity -Infinity NaN>, <0.1 Infinity -Infinity NaN>); - ctx.fillStyle = '#0f0'; - ctx.fillRect(-100, -10, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.scale.multiple - desc: Multiple scale()s combine - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.scale(Math.sqrt(2), Math.sqrt(2)); - ctx.scale(Math.sqrt(2), Math.sqrt(2)); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 50, 25); - @assert pixel 90,40 == 0,255,0,255; - t.done(); - - -- name: 2d.transformation.rotate.zero - desc: rotate() by 0 does nothing - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.rotate(0); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.rotate.radians - desc: rotate() uses radians - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.rotate(Math.PI); // should fail obviously if this is 3.1 degrees - ctx.fillStyle = '#0f0'; - ctx.fillRect(-100, -50, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.rotate.direction - desc: rotate() is clockwise - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.rotate(Math.PI / 2); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, -100, 50, 100); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.rotate.wrap - desc: rotate() wraps large positive values correctly - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.rotate(Math.PI * (1 + 4096)); // == pi (mod 2*pi) - // We need about pi +/- 0.001 in order to get correct-looking results - // 32-bit floats can store pi*4097 with precision 2^-10, so that should - // be safe enough on reasonable implementations - ctx.fillStyle = '#0f0'; - ctx.fillRect(-100, -50, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,2 == 0,255,0,255; - @assert pixel 98,47 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.rotate.wrapnegative - desc: rotate() wraps large negative values correctly - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.rotate(-Math.PI * (1 + 4096)); - ctx.fillStyle = '#0f0'; - ctx.fillRect(-100, -50, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - @assert pixel 98,2 == 0,255,0,255; - @assert pixel 98,47 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.rotate.nonfinite - desc: rotate() with Infinity/NaN is ignored - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.translate(100, 10); - @nonfinite ctx.rotate(<0.1 Infinity -Infinity NaN>); - ctx.fillStyle = '#0f0'; - ctx.fillRect(-100, -10, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.translate.basic - desc: translate() works - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.translate(100, 50); - ctx.fillStyle = '#0f0'; - ctx.fillRect(-100, -50, 100, 50); - @assert pixel 90,40 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.translate.nonfinite - desc: translate() with Infinity/NaN is ignored - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.translate(100, 10); - @nonfinite ctx.translate(<0.1 Infinity -Infinity NaN>, <0.1 Infinity -Infinity NaN>); - ctx.fillStyle = '#0f0'; - ctx.fillRect(-100, -10, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - - -- name: 2d.transformation.transform.identity - desc: transform() with the identity matrix does nothing - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.transform(1,0, 0,1, 0,0); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.transform.skewed - desc: transform() with skewy matrix transforms correctly - code: | - // Create green with a red square ring inside it - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(20, 10, 60, 30); - ctx.fillStyle = '#0f0'; - ctx.fillRect(40, 20, 20, 10); - // Draw a skewed shape to fill that gap, to make sure it is aligned correctly - ctx.transform(1,4, 2,3, 5,6); - // Post-transform coordinates: - // [[20,10],[80,10],[80,40],[20,40],[20,10],[40,20],[40,30],[60,30],[60,20],[40,20],[20,10]]; - // Hence pre-transform coordinates: - var pts=[[-7.4,11.2],[-43.4,59.2],[-31.4,53.2],[4.6,5.2],[-7.4,11.2], - [-15.4,25.2],[-11.4,23.2],[-23.4,39.2],[-27.4,41.2],[-15.4,25.2], - [-7.4,11.2]]; - ctx.beginPath(); - ctx.moveTo(pts[0][0], pts[0][1]); - for (var i = 0; i < pts.length; ++i) - ctx.lineTo(pts[i][0], pts[i][1]); - ctx.fill(); - @assert pixel 21,11 == 0,255,0,255; - @assert pixel 79,11 == 0,255,0,255; - @assert pixel 21,39 == 0,255,0,255; - @assert pixel 79,39 == 0,255,0,255; - @assert pixel 39,19 == 0,255,0,255; - @assert pixel 61,19 == 0,255,0,255; - @assert pixel 39,31 == 0,255,0,255; - @assert pixel 61,31 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.transform.multiply - desc: transform() multiplies the CTM - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.transform(1,2, 3,4, 5,6); - ctx.transform(-2,1, 3/2,-1/2, 1,-2); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.transform.nonfinite - desc: transform() with Infinity/NaN is ignored - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.translate(100, 10); - @nonfinite ctx.transform(<0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>); - ctx.fillStyle = '#0f0'; - ctx.fillRect(-100, -10, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); - - -- name: 2d.transformation.setTransform.skewed - code: | - // Create green with a red square ring inside it - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 100, 50); - ctx.fillStyle = '#f00'; - ctx.fillRect(20, 10, 60, 30); - ctx.fillStyle = '#0f0'; - ctx.fillRect(40, 20, 20, 10); - // Draw a skewed shape to fill that gap, to make sure it is aligned correctly - ctx.setTransform(1,4, 2,3, 5,6); - // Post-transform coordinates: - // [[20,10],[80,10],[80,40],[20,40],[20,10],[40,20],[40,30],[60,30],[60,20],[40,20],[20,10]]; - // Hence pre-transform coordinates: - var pts=[[-7.4,11.2],[-43.4,59.2],[-31.4,53.2],[4.6,5.2],[-7.4,11.2], - [-15.4,25.2],[-11.4,23.2],[-23.4,39.2],[-27.4,41.2],[-15.4,25.2], - [-7.4,11.2]]; - ctx.beginPath(); - ctx.moveTo(pts[0][0], pts[0][1]); - for (var i = 0; i < pts.length; ++i) - ctx.lineTo(pts[i][0], pts[i][1]); - ctx.fill(); - @assert pixel 21,11 == 0,255,0,255; - @assert pixel 79,11 == 0,255,0,255; - @assert pixel 21,39 == 0,255,0,255; - @assert pixel 79,39 == 0,255,0,255; - @assert pixel 39,19 == 0,255,0,255; - @assert pixel 61,19 == 0,255,0,255; - @assert pixel 39,31 == 0,255,0,255; - @assert pixel 61,31 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.setTransform.multiple - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.setTransform(1/2,0, 0,1/2, 0,0); - ctx.setTransform(2,0, 0,2, 0,0); - ctx.fillStyle = '#0f0'; - ctx.fillRect(0, 0, 50, 25); - @assert pixel 75,35 == 0,255,0,255; - t.done(); - -- name: 2d.transformation.setTransform.nonfinite - desc: setTransform() with Infinity/NaN is ignored - code: | - ctx.fillStyle = '#f00'; - ctx.fillRect(0, 0, 100, 50); - ctx.translate(100, 10); - @nonfinite ctx.setTransform(<0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>, <0 Infinity -Infinity NaN>); - ctx.fillStyle = '#0f0'; - ctx.fillRect(-100, -10, 100, 50); - @assert pixel 50,25 == 0,255,0,255; - t.done(); diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-selectmenu-element/selectmenu-form-elements.tentative.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-selectmenu-element/selectmenu-form-elements.tentative.html new file mode 100644 index 00000000000..eed098256ca --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-selectmenu-element/selectmenu-form-elements.tentative.html @@ -0,0 +1,25 @@ + + +HTMLSelectMenuElement Test: form.elements + + + + + +
    + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-attribute-basic.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-attribute-basic.html index 88051f57394..c5937cd3237 100644 --- a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-attribute-basic.html +++ b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-attribute-basic.html @@ -160,8 +160,8 @@ window.onload = () => { assert_false(popover.matches(':open')); popover.showPopover(); assert_true(popover.matches(':open')); - popover.setAttribute('popover','manual'); } + popover.setAttribute('popover','manual'); assert_false(popover.matches(':open')); popover.showPopover(); assert_true(popover.matches(':open')); diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-types.html b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-types.html index 615c5a818c0..9941f322828 100644 --- a/tests/wpt/web-platform-tests/html/semantics/popovers/popover-types.html +++ b/tests/wpt/web-platform-tests/html/semantics/popovers/popover-types.html @@ -5,35 +5,33 @@ -
    +
    Popover
    Async
    Async
    -
    + diff --git a/tests/wpt/web-platform-tests/html/semantics/popovers/resources/popover-utils.js b/tests/wpt/web-platform-tests/html/semantics/popovers/resources/popover-utils.js index 9c6ba77549b..7eb9e6327a2 100644 --- a/tests/wpt/web-platform-tests/html/semantics/popovers/resources/popover-utils.js +++ b/tests/wpt/web-platform-tests/html/semantics/popovers/resources/popover-utils.js @@ -126,7 +126,7 @@ function assertPopoverVisibility(popover, isPopover, expectedVisibility, message } else { assert_equals(window.getComputedStyle(popover).display,'none',`${message}: Non-showing popovers should have display:none`); assert_false(popover.matches(':open'),`${message}: Non-showing popovers should *not* match :open`); - assert_true(popover.matches(':closed'),`${message}: Non-showing popovers should match :closed`); + assert_equals(popover.matches(':closed'),isPopover,`${message}: Non-showing popovers should match :closed`); } } diff --git a/tests/wpt/web-platform-tests/images/cicp.png b/tests/wpt/web-platform-tests/images/cicp.png new file mode 100644 index 00000000000..8fa0ce2123c Binary files /dev/null and b/tests/wpt/web-platform-tests/images/cicp.png differ diff --git a/tests/wpt/web-platform-tests/images/trns.png b/tests/wpt/web-platform-tests/images/trns.png new file mode 100644 index 00000000000..4e309a89a8a Binary files /dev/null and b/tests/wpt/web-platform-tests/images/trns.png differ diff --git a/tests/wpt/web-platform-tests/inert/inert-computed-style.html b/tests/wpt/web-platform-tests/inert/inert-computed-style.html index 3c1748de2b4..f1adbab6b7a 100644 --- a/tests/wpt/web-platform-tests/inert/inert-computed-style.html +++ b/tests/wpt/web-platform-tests/inert/inert-computed-style.html @@ -15,11 +15,11 @@ left: 0; background-color: blue; } - #non-inert { + #nonInert { background-color: red; } -
    +
    + + + + + + + +

    Long Animation Frame: queue time

    +
    + + diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-event-listener.html b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-event-listener.html new file mode 100644 index 00000000000..6349c28b320 --- /dev/null +++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-event-listener.html @@ -0,0 +1,33 @@ + + +Long Animation Frame Timing: basic + + + + + + +

    Long Animation Frame: event handlers

    +
    + + diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-idle.html b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-idle.html new file mode 100644 index 00000000000..bc9f910bb14 --- /dev/null +++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-idle.html @@ -0,0 +1,36 @@ + + +Long Animation Frame Timing: requestIdleCallback + + + + + + +

    Long Animation Frame: requestIdleCallback

    +
    + + diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-iframe-popup.html b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-iframe-popup.html index 83def572998..565273b6c6a 100644 --- a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-iframe-popup.html +++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-iframe-popup.html @@ -15,7 +15,7 @@ const host_info = get_host_info(); const {ORIGIN, REMOTE_ORIGIN, HTTP_NOTSAMESITE_ORIGIN} = host_info; promise_test(async t => { - const executor = await prepare_exec_iframe(t, ORIGIN); + const [executor] = await prepare_exec_iframe(t, ORIGIN); await expect_no_long_frame(() => executor.execute_script((duration) => { const deadline = performance.now() + duration; while (performance.now() < deadline) {} @@ -23,7 +23,7 @@ promise_test(async t => { }, 'A long busy wait without render in a same-origin iframe is not a long animation frame'); promise_test(async t => { - const executor = await prepare_exec_iframe(t, HTTP_NOTSAMESITE_ORIGIN); + const [executor] = await prepare_exec_iframe(t, HTTP_NOTSAMESITE_ORIGIN); await expect_no_long_frame(() => executor.execute_script((duration) => { const deadline = performance.now() + duration; while (performance.now() < deadline) {} @@ -31,7 +31,7 @@ promise_test(async t => { }, 'A long busy wait in a cross-origin iframe is not a long animation frame'); promise_test(async t => { - const executor = await prepare_exec_iframe(t, ORIGIN); + const [executor] = await prepare_exec_iframe(t, ORIGIN); await expect_long_frame(() => executor.execute_script(async (duration) => { await new Promise(resolve => window.requestAnimationFrame(resolve)); const deadline = performance.now() + duration; @@ -40,7 +40,7 @@ promise_test(async t => { }, 'A long busy wait in a same-origin requestAnimationFrame is a long animation frame'); promise_test(async t => { - const executor = await prepare_exec_popup(t, ORIGIN); + const [executor] = await prepare_exec_popup(t, ORIGIN); await expect_no_long_frame(() => executor.execute_script((duration) => { const deadline = performance.now() + duration; while (performance.now() < deadline) {} @@ -49,7 +49,7 @@ promise_test(async t => { for (const origin of ["ORIGIN", "REMOTE_ORIGIN", "HTTP_NOTSAMESITE_ORIGIN"]) { promise_test(async t => { - const executor = await prepare_exec_iframe(t, host_info[origin]); + const [executor] = await prepare_exec_iframe(t, host_info[origin]); const entry = await executor.execute_script(async (duration) => { const entryPromise = new Promise(resolve => new PerformanceObserver(list => { resolve(list.getEntries(0)); diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-promise.html b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-promise.html new file mode 100644 index 00000000000..226d06a8303 --- /dev/null +++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-promise.html @@ -0,0 +1,52 @@ + + +Long Animation Frame Timing: basic + + + + + + + +

    Long Animation Frame: promise resolvers

    +
    + + diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-script-block.html b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-script-block.html new file mode 100644 index 00000000000..f896a737ce7 --- /dev/null +++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-script-block.html @@ -0,0 +1,47 @@ + + +Long Animation Frame Timing: basic + + + + + + +

    Long Animation Frame: script blocks

    +
    + + diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-script-window-attribution.html b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-script-window-attribution.html new file mode 100644 index 00000000000..001bb537f79 --- /dev/null +++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-script-window-attribution.html @@ -0,0 +1,62 @@ + + + +Long Animation Frame Timing: window attribution + + + + + + + + +
    + + diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-supportedEntryTypes.html b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-supportedEntryTypes.html new file mode 100644 index 00000000000..efa01481fa1 --- /dev/null +++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-supportedEntryTypes.html @@ -0,0 +1,22 @@ + + +Long Animation Frame Timing: supportedEntryTypes + + + + + +

    Long Animation Frame: supportedEntryTypes

    +
    + + diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-user-callback.html b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-user-callback.html new file mode 100644 index 00000000000..bc8fdd05e10 --- /dev/null +++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-user-callback.html @@ -0,0 +1,52 @@ + + +Long Animation Frame Timing: basic + + + + + + +

    Long Animation Frame: user callbacks

    +
    + + diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-window-only.worker.js b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-window-only.worker.js new file mode 100644 index 00000000000..c1f0439c4bd --- /dev/null +++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/loaf-window-only.worker.js @@ -0,0 +1,11 @@ +importScripts("/resources/testharness.js"); + +test(() => { + assert_false(PerformanceObserver.supportedEntryTypes.includes("long-animation-frame")); +}, 'PerformanceObserver should not include "long-animation-frame" in workers'); + +test(() => { + assert_false("PerformanceLongAnimationFrameTiming" in self); +}, 'PerformanceLongAnimationFrameTiming should not be exposed in workers'); + +done(); diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/resources/busy.js b/tests/wpt/web-platform-tests/long-animation-frame/tentative/resources/busy.js new file mode 100644 index 00000000000..9d761b6de5e --- /dev/null +++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/resources/busy.js @@ -0,0 +1,4 @@ +(() => { + const deadline = performance.now() + 360; + while (performance.now() < deadline) {} +})(); diff --git a/tests/wpt/web-platform-tests/long-animation-frame/tentative/resources/utils.js b/tests/wpt/web-platform-tests/long-animation-frame/tentative/resources/utils.js index 47c138b1e62..3a121a5a9b5 100644 --- a/tests/wpt/web-platform-tests/long-animation-frame/tentative/resources/utils.js +++ b/tests/wpt/web-platform-tests/long-animation-frame/tentative/resources/utils.js @@ -5,14 +5,18 @@ setup(() => const very_long_frame_duration = 360; -function loaf_promise() { +function loaf_promise(t) { return new Promise(resolve => { const observer = new PerformanceObserver(entries => { const entry = entries.getEntries()[0]; - if (entry.duration >= very_long_frame_duration) + if (entry.duration >= very_long_frame_duration) { + observer.disconnect(); resolve(entry); + } }); + t.add_cleanup(() => observer.disconnect()); + observer.observe({entryTypes: ['long-animation-frame']}); }); } @@ -28,9 +32,9 @@ async function expect_long_frame(cb, t) { await windowLoaded; await new Promise(resolve => t.step_timeout(resolve, 0)); const timeout = new Promise((resolve, reject) => - t.step_timeout(() => reject("timeout"), no_long_frame_timeout)); - const receivedLongFrame = loaf_promise(); - await cb(); + t.step_timeout(() => resolve("timeout"), no_long_frame_timeout)); + const receivedLongFrame = loaf_promise(t); + await cb(t); const entry = await Promise.race([ receivedLongFrame, timeout @@ -38,10 +42,24 @@ async function expect_long_frame(cb, t) { return entry; } +async function expect_long_frame_with_script(cb, predicate, t) { + for (let i = 0; i < 10; ++i) { + const entry = await expect_long_frame(cb, t); + if (entry === "timeout" || !entry.scripts.length) + continue; + for (const script of entry.scripts) { + if (predicate(script)) + return [entry, script]; + } + } + + return []; +} + async function expect_no_long_frame(cb, t) { await windowLoaded; for (let i = 0; i < 5; ++i) { - const receivedLongFrame = loaf_promise(); + const receivedLongFrame = loaf_promise(t); await cb(); const result = await Promise.race([receivedLongFrame, new Promise(resolve => t.step_timeout(() => resolve("timeout"), @@ -62,7 +80,7 @@ async function prepare_exec_iframe(t, origin) { iframe.src = url.href; document.body.appendChild(iframe); await new Promise(resolve => iframe.addEventListener("load", resolve)); - return new RemoteContext(uuid); + return [new RemoteContext(uuid), iframe]; } @@ -72,5 +90,38 @@ async function prepare_exec_popup(t, origin) { url.searchParams.set("uuid", uuid); const popup = window.open(url); t.add_cleanup(() => popup.close()); - return new RemoteContext(uuid); + return [new RemoteContext(uuid), popup]; +} +function test_loaf_script(cb, name, type, label) { + promise_test(async t => { + const [entry, script] = await expect_long_frame_with_script(cb, + script => (script.type === type && script.duration >= very_long_frame_duration), t); + + assert_true(!!entry, "Entry detected"); + assert_equals(script.name, name); + assert_greater_than_equal(script.duration, very_long_frame_duration); + assert_greater_than_equal(entry.duration, script.duration); + assert_greater_than_equal(script.executionStart, script.startTime); + assert_greater_than_equal(script.startTime, entry.startTime) + assert_equals(script.window, window); + assert_equals(script.forcedStyleAndLayoutDuration, 0); + assert_equals(script.windowAttribution, "self"); +}, `LoAF script: ${name} ${type},${label ? ` ${label}` : ''}`); + +} + +function test_self_user_callback(cb, name) { + test_loaf_script(cb, name, "user-callback"); +} + +function test_self_event_listener(cb, name) { + test_loaf_script(cb, name, "event-listener"); +} + +function test_promise_script(cb, resolve_or_reject, name, label) { + test_loaf_script(cb, name, `${resolve_or_reject}-promise`, label); +} + +function test_self_script_block(cb, name, type) { + test_loaf_script(cb, name, type); } diff --git a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-raf.html b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-raf.html index d65f8928186..169843a7423 100644 --- a/tests/wpt/web-platform-tests/longtask-timing/longtask-in-raf.html +++ b/tests/wpt/web-platform-tests/longtask-timing/longtask-in-raf.html @@ -1,46 +1,52 @@ - -LongTask Timing: long task in rAF + + + LongTask Timing: long task in rAF + + + + +

    Long Task: requestAnimationFrame

    +
    + - - + let entries = await new Promise(resolve => { + new PerformanceObserver( + entryList => { + const entries = entryList.getEntries().filter( + e => e.name == 'self' && e.attribution[0].containerType == 'window'); + if (entries) { + resolve(entries); + } + }).observe({ entryTypes: ['longtask'] }); -

    Long Task: requestAnimationFrame

    -
    - + }); + + assert_equals(entries.length, 1, + 'Exactly one entry is expected.'); + const longtask = entries[0]; + checkLongTaskEntry(longtask); + // Assert the TaskAttributionTiming entry in attribution. + assert_equals(longtask.attribution.length, 1, + 'Exactly one attribution entry is expected'); + const attribution = longtask.attribution[0]; + assert_equals(attribution.entryType, 'taskattribution'); + assert_equals(attribution.name, 'unknown'); + assert_equals(attribution.duration, 0); + assert_equals(attribution.startTime, 0); + assert_equals(attribution.containerType, 'window'); + assert_equals(attribution.containerId, ''); + assert_equals(attribution.containerName, ''); + assert_equals(attribution.containerSrc, ''); + }, 'Performance longtask entries are observable.'); + diff --git a/tests/wpt/web-platform-tests/longtask-timing/resources/utils.js b/tests/wpt/web-platform-tests/longtask-timing/resources/utils.js index 36bd6c7bc28..7bb37bab32c 100644 --- a/tests/wpt/web-platform-tests/longtask-timing/resources/utils.js +++ b/tests/wpt/web-platform-tests/longtask-timing/resources/utils.js @@ -1,11 +1,11 @@ -function checkLongTaskEntry(longtask, name='self') { - assert_equals(longtask.entryType, 'longtask'); - assert_equals(longtask.name, name); - assert_true(Number.isInteger(longtask.duration)); - assert_greater_than_equal(longtask.duration, 50); - assert_greater_than_equal(longtask.startTime, 0); +function checkLongTaskEntry(longtask, name = 'self') { + assert_equals(longtask.entryType, 'longtask', 'The entryType should be longtask'); + assert_equals(longtask.name, name, 'Name should be ' + name + '.'); + assert_true(Number.isInteger(longtask.duration, 'The duration should be an integer.')); + assert_greater_than_equal(longtask.duration, 50, 'The Duration should be greater than or equal to 50.'); + assert_greater_than_equal(longtask.startTime, 0, 'The startTime should be greater than or equal to 0.'); const currentTime = performance.now(); - assert_less_than_equal(longtask.startTime, currentTime); + assert_less_than_equal(longtask.startTime, currentTime, 'The startTime should be less than or equal to current time.'); } function hasUnrelatedTaskName(taskName, expectedTaskName) { diff --git a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-pause-resume.html b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-pause-resume.html index a1495dcb0c7..84efe52e06b 100644 --- a/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-pause-resume.html +++ b/tests/wpt/web-platform-tests/mediacapture-record/MediaRecorder-pause-resume.html @@ -57,10 +57,11 @@ "Should have gotten expected events"); }, "MediaRecorder handles pause() and resume() calls appropriately in state and events"); - promise_test(async () => { - let video = createVideoStream(); - let recorder = new MediaRecorder(video); - let events = recordEvents(recorder, + promise_test(async t => { + const {stream: video, control} = createVideoStream(t); + control.addVideoFrame(); + const recorder = new MediaRecorder(video); + const events = recordEvents(recorder, ["start", "stop", "dataavailable", "pause", "resume", "error"]); recorder.start(); diff --git a/tests/wpt/web-platform-tests/navigation-api/navigate-event/navigation-traverseTo-in-iframe-same-document-preventDefault.html b/tests/wpt/web-platform-tests/navigation-api/navigate-event/navigation-traverseTo-in-iframe-same-document-preventDefault.html index d68b11fa7cc..463746e8f79 100644 --- a/tests/wpt/web-platform-tests/navigation-api/navigate-event/navigation-traverseTo-in-iframe-same-document-preventDefault.html +++ b/tests/wpt/web-platform-tests/navigation-api/navigate-event/navigation-traverseTo-in-iframe-same-document-preventDefault.html @@ -27,12 +27,9 @@ promise_test(async t => { assert_equals(e.filename, location.href); top_navigateerror_fired = true; }); - let iframe_navigateerror_fired = false; - i.contentWindow.navigation.onnavigateerror = t.step_func(e => { - assert_equals(e.constructor, i.contentWindow.ErrorEvent); - assert_equals(e.filename, i.contentWindow.location.href); - iframe_navigateerror_fired = true; - }); + + i.contentWindow.navigation.onnavigate = t.unreached_func("navigate event should not fire in the iframe, because the traversal was cancelled in the top window"); + i.contentWindow.navigation.onnavigateerror = t.unreached_func("navigateerror event should not fire in the iframe, because the navigate event was not fired"); // When the top window blocks the traversal, it should be blocked in the // iframe as well, and the traversal promises in the iframe should be rejected. @@ -40,7 +37,6 @@ promise_test(async t => { const iDOMException = iWindow.DOMException; await assertBothRejectDOM(t, i.contentWindow.navigation.traverseTo(i.contentWindow.navigation.entries()[0].key), "AbortError", iWindow, iDOMException); assert_true(top_navigateerror_fired); - assert_true(iframe_navigateerror_fired); assert_equals(navigation.currentEntry.index, 1); assert_equals(i.contentWindow.navigation.currentEntry.index, 1); }, "navigation.traverseTo() in an iframe with same-document preventDefault in its parent"); diff --git a/tests/wpt/web-platform-tests/navigation-api/navigation-methods/return-value/traverseTo-detach-cross-document-before-navigate-event.html b/tests/wpt/web-platform-tests/navigation-api/navigation-methods/return-value/traverseTo-detach-cross-document-before-navigate-event.html new file mode 100644 index 00000000000..ed319f62239 --- /dev/null +++ b/tests/wpt/web-platform-tests/navigation-api/navigation-methods/return-value/traverseTo-detach-cross-document-before-navigate-event.html @@ -0,0 +1,32 @@ + + + + + + + + diff --git a/tests/wpt/web-platform-tests/navigation-api/navigation-methods/return-value/traverseTo-detach-same-document-before-navigate-event.html b/tests/wpt/web-platform-tests/navigation-api/navigation-methods/return-value/traverseTo-detach-same-document-before-navigate-event.html new file mode 100644 index 00000000000..592ac6f1990 --- /dev/null +++ b/tests/wpt/web-platform-tests/navigation-api/navigation-methods/return-value/traverseTo-detach-same-document-before-navigate-event.html @@ -0,0 +1,31 @@ + + + + + + + + diff --git a/tests/wpt/web-platform-tests/navigation-api/navigation-methods/sandboxing-back-parent.html b/tests/wpt/web-platform-tests/navigation-api/navigation-methods/sandboxing-back-parent.html index bc3d4e2e9fb..6eee3f917cd 100644 --- a/tests/wpt/web-platform-tests/navigation-api/navigation-methods/sandboxing-back-parent.html +++ b/tests/wpt/web-platform-tests/navigation-api/navigation-methods/sandboxing-back-parent.html @@ -29,6 +29,7 @@ promise_test(async t => { await new Promise(resolve => window.onhashchange = resolve); navigation.onnavigate = t.unreached_func("navigate must not fire"); + navigation.onnavigateerror = t.unreached_func("navigateerror must not fire"); window.onpopstate = t.unreached_func("popstate must not fire"); window.onhashchange = t.unreached_func("hashchange must not fire"); diff --git a/tests/wpt/web-platform-tests/navigation-api/navigation-methods/sandboxing-back-sibling.html b/tests/wpt/web-platform-tests/navigation-api/navigation-methods/sandboxing-back-sibling.html index 718ea6d3dda..97c03ea0c2f 100644 --- a/tests/wpt/web-platform-tests/navigation-api/navigation-methods/sandboxing-back-sibling.html +++ b/tests/wpt/web-platform-tests/navigation-api/navigation-methods/sandboxing-back-sibling.html @@ -33,6 +33,7 @@ promise_test(async t => { await new Promise(resolve => i.onload = resolve); i.contentWindow.navigation.onnavigate = t.unreached_func("navigate must not fire"); + i.contentWindow.navigation.onnavigateerror = t.unreached_func("navigateerror must not fire"); i.contentWindow.onbeforeunload = t.unreached_func("beforeunload must not fire"); i.contentWindow.onunload = t.unreached_func("unload must not fire"); i.contentWindow.onpagehide = t.unreached_func("pagehide must not fire"); diff --git a/tests/wpt/web-platform-tests/png/META.yml b/tests/wpt/web-platform-tests/png/META.yml new file mode 100644 index 00000000000..da174ac614d --- /dev/null +++ b/tests/wpt/web-platform-tests/png/META.yml @@ -0,0 +1,4 @@ +spec: https://www.w3.org/TR/png/ +suggested_reviewers: + - programmax + - svgeesus diff --git a/tests/wpt/web-platform-tests/png/cicp-chunk.html b/tests/wpt/web-platform-tests/png/cicp-chunk.html new file mode 100644 index 00000000000..4afc262dcf5 --- /dev/null +++ b/tests/wpt/web-platform-tests/png/cicp-chunk.html @@ -0,0 +1,40 @@ + +PNG test: cICP chunk + + + + + + +

    cICP chunk

    +

    test pixel values of a display-p3 PNG

    + +

    Actual output:

    +

    FAIL (fallback content)

    + + + diff --git a/tests/wpt/web-platform-tests/png/trns-chunk.html b/tests/wpt/web-platform-tests/png/trns-chunk.html new file mode 100644 index 00000000000..652cda0e320 --- /dev/null +++ b/tests/wpt/web-platform-tests/png/trns-chunk.html @@ -0,0 +1,37 @@ + +PNG test: tRNS chunk + + + + + + +

    tRNS chunk handling

    +

    test ignored high bits on lower bit depth tRNS

    + +

    Actual output:

    +

    FAIL (fallback content)

    + + + diff --git a/tests/wpt/web-platform-tests/pointerevents/compat/pointerevent_mouse-pointer-preventdefault-passive.html b/tests/wpt/web-platform-tests/pointerevents/compat/pointerevent_mouse-pointer-preventdefault-passive.html new file mode 100644 index 00000000000..57da0968660 --- /dev/null +++ b/tests/wpt/web-platform-tests/pointerevents/compat/pointerevent_mouse-pointer-preventdefault-passive.html @@ -0,0 +1,84 @@ + +Canceling passive pointerevents does not affect compat mouseevents + + + + + + + +
    +
    + + diff --git a/tests/wpt/web-platform-tests/scroll-animations/crashtests/invalid-animation-range.html b/tests/wpt/web-platform-tests/scroll-animations/crashtests/invalid-animation-range.html new file mode 100644 index 00000000000..43b23c93b60 --- /dev/null +++ b/tests/wpt/web-platform-tests/scroll-animations/crashtests/invalid-animation-range.html @@ -0,0 +1,13 @@ + +Invalid animation range + +
    + + + diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/animation-shorthand.html b/tests/wpt/web-platform-tests/scroll-animations/css/animation-shorthand.html index 60d6c766467..87e66d0f532 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/css/animation-shorthand.html +++ b/tests/wpt/web-platform-tests/scroll-animations/css/animation-shorthand.html @@ -40,4 +40,53 @@ test_shorthand_value('animation', 'animation-name': 'anim1, anim2, anim3', 'animation-timeline': 'auto, auto, auto' }); + +test((t) => { + t.add_cleanup(() => { + target.style = ''; + }); + + target.style.animation = 'anim 1s'; + target.style.animationTimeline = 'timeline'; + assert_equals(target.style.animation, ''); + assert_equals(target.style.animationName, 'anim'); + assert_equals(target.style.animationDuration, '1s'); +}, 'Animation shorthand can not represent non-initial timelines (specified)'); + +test((t) => { + t.add_cleanup(() => { + target.style = ''; + }); + + target.style.animation = 'anim 1s'; + target.style.animationTimeline = 'timeline'; + assert_equals(getComputedStyle(target).animation, ''); + assert_equals(getComputedStyle(target).animationName, 'anim'); + assert_equals(getComputedStyle(target).animationDuration, '1s'); +}, 'Animation shorthand can not represent non-initial timelines (computed)'); + +test((t) => { + t.add_cleanup(() => { + target.style = ''; + }); + + target.style.animation = 'anim 1s'; + target.style.animationDelayEnd = '42s'; + assert_equals(target.style.animation, ''); + assert_equals(target.style.animationName, 'anim'); + assert_equals(target.style.animationDuration, '1s'); +}, 'Animation shorthand can not represent non-initial animation-delay-end (specified)'); + +test((t) => { + t.add_cleanup(() => { + target.style = ''; + }); + + target.style.animation = 'anim 1s'; + target.style.animationDelayEnd = '42s'; + assert_equals(getComputedStyle(target).animation, ''); + assert_equals(getComputedStyle(target).animationName, 'anim'); + assert_equals(getComputedStyle(target).animationDuration, '1s'); +}, 'Animation shorthand can not represent non-initial animation-delay-end (computed)'); + diff --git a/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-named-scroll-progress-timeline.tentative.html b/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-named-scroll-progress-timeline.tentative.html index 9f55e2d2c91..30461723386 100644 --- a/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-named-scroll-progress-timeline.tentative.html +++ b/tests/wpt/web-platform-tests/scroll-animations/css/animation-timeline-named-scroll-progress-timeline.tentative.html @@ -655,8 +655,25 @@ promise_test(async t => { assert_equals(getComputedStyle(target).translate, '100px'); }, 'scroll-timeline-axis is vertical'); -// TODO: Add more tests which change scroll-timeline-axis property. -// Those animations which use this timeline should be restyled properly. +promise_test(async t => { + let [scroller, target] = createScrollerAndTarget(t); + + document.body.appendChild(scroller); + document.body.appendChild(target); + + scroller.style.scrollTimeline = 'timeline block'; + target.style.animation = "anim 10s linear"; + target.style.animationTimeline = 'timeline'; + + scroller.scrollTop = 50; + scroller.scrollLeft = 25; + await waitForNextFrame(); + assert_equals(getComputedStyle(target).translate, '100px'); + + scroller.style.scrollTimelineAxis = 'inline'; + await waitForNextFrame(); + assert_equals(getComputedStyle(target).translate, '75px'); +}, 'scroll-timeline-axis is mutated'); diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-data-url.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-data-url.https.html new file mode 100644 index 00000000000..f0922193dd0 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/import-scripts-data-url.https.html @@ -0,0 +1,18 @@ + + +Tests for importScripts: data: URL + + + + + + diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-data-url-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-data-url-worker.js new file mode 100644 index 00000000000..fdabdafc630 --- /dev/null +++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-scripts-data-url-worker.js @@ -0,0 +1 @@ +importScripts('data:text/javascript,'); diff --git a/tests/wpt/web-platform-tests/storage-access-api/helpers.js b/tests/wpt/web-platform-tests/storage-access-api/helpers.js index ddc638434ae..f718f637cd9 100644 --- a/tests/wpt/web-platform-tests/storage-access-api/helpers.js +++ b/tests/wpt/web-platform-tests/storage-access-api/helpers.js @@ -126,11 +126,11 @@ async function DeleteCookieInFrame(frame, name, params) { } // Tests whether the frame can write cookies via document.cookie. Note that this -// overwrites, then deletes, cookies named "cookie" and "foo". +// overwrites, then optionally deletes, cookies named "cookie" and "foo". // // This function requires the caller to have included // /cookies/resources/cookie-helper.sub.js. -async function CanFrameWriteCookies(frame) { +async function CanFrameWriteCookies(frame, keep_after_writing = false) { const cookie_suffix = "Secure;SameSite=None;Path=/"; await DeleteCookieInFrame(frame, "cookie", cookie_suffix); await DeleteCookieInFrame(frame, "foo", cookie_suffix); @@ -142,8 +142,10 @@ async function CanFrameWriteCookies(frame) { const can_write = cookieStringHasCookie("cookie", "monster", cookies) && cookieStringHasCookie("foo", "bar", cookies); - await DeleteCookieInFrame(frame, "cookie", cookie_suffix); - await DeleteCookieInFrame(frame, "foo", cookie_suffix); + if (!keep_after_writing) { + await DeleteCookieInFrame(frame, "cookie", cookie_suffix); + await DeleteCookieInFrame(frame, "foo", cookie_suffix); + } return can_write; } diff --git a/tests/wpt/web-platform-tests/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js b/tests/wpt/web-platform-tests/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js index 67906708aed..24595ed3408 100644 --- a/tests/wpt/web-platform-tests/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js +++ b/tests/wpt/web-platform-tests/storage-access-api/requestStorageAccess-cross-origin-iframe-navigation.sub.https.window.js @@ -30,7 +30,7 @@ assert_true(await RequestStorageAccessInFrame(frame), "requestStorageAccess resolves without requiring a gesture."); assert_true(await FrameHasStorageAccess(frame), "frame has storage access after request."); - assert_true(await CanFrameWriteCookies(frame), "frame can write cookies via JS after request."); + assert_true(await CanFrameWriteCookies(frame, /* keep_after_writing=*/true), "frame can write cookies via JS after request."); return frame; } @@ -42,6 +42,7 @@ await FrameInitiatedReload(frame); + assert_true(cookieStringHasCookie('cookie', 'monster', await GetHTTPCookiesFromFrame(frame)), "The frame's navigation request included cookies."); assert_true(await FrameHasStorageAccess(frame), "frame has storage access after refresh."); assert_true(await CanFrameWriteCookies(frame), "frame can write cookies via JS after refresh."); }, "Self-initiated reloads preserve storage access"); @@ -53,6 +54,7 @@ await FrameInitiatedNavigation(frame, altWwwResponder); + assert_true(cookieStringHasCookie('cookie', 'monster', await GetHTTPCookiesFromFrame(frame)), "The frame's navigation request included cookies."); assert_true(await FrameHasStorageAccess(frame), "frame has storage access after refresh."); assert_true(await CanFrameWriteCookies(frame), "frame can write cookies via JS after refresh."); }, "Self-initiated same-origin navigations preserve storage access"); diff --git a/tests/wpt/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.js b/tests/wpt/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.js index 4222051c10b..82794061bd0 100644 --- a/tests/wpt/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.js +++ b/tests/wpt/web-platform-tests/storage-access-api/storage-access-permission.sub.https.window.js @@ -62,10 +62,10 @@ const permission = await navigator.permissions.query({name: "storage-access"}); assert_equals(permission.name, "storage-access"); - assert_equals(permission.state, "denied"); + assert_equals(permission.state, "prompt"); await test_driver.set_permission({ name: 'storage-access' }, 'prompt'); - }, "Permission denied state can be queried"); + }, "Permission denied state is hidden"); promise_test(async t => { t.add_cleanup(async () => { diff --git a/tests/wpt/web-platform-tests/tools/third_party/tooltool/tooltool.py b/tests/wpt/web-platform-tests/tools/third_party/tooltool/tooltool.py index 53929fce880..5abc98a09d8 100755 --- a/tests/wpt/web-platform-tests/tools/third_party/tooltool/tooltool.py +++ b/tests/wpt/web-platform-tests/tools/third_party/tooltool/tooltool.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # tooltool is a lookaside cache implemented in Python # Copyright (C) 2011 John H. Ford @@ -22,8 +22,6 @@ # in which the manifest file resides and it should be called # 'manifest.tt' -from __future__ import print_function - import base64 import calendar import hashlib @@ -36,72 +34,180 @@ import os import pprint import re import shutil +import stat import sys import tarfile import tempfile import threading import time import zipfile +from contextlib import closing, contextmanager +from functools import wraps +from io import BytesIO, open +from random import random +from subprocess import PIPE, Popen -from io import open -from io import BytesIO -from subprocess import PIPE -from subprocess import Popen - -__version__ = '1' +__version__ = "1.4.0" # Allowed request header characters: # !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9, \, " REQUEST_HEADER_ATTRIBUTE_CHARS = re.compile( - r"^[ a-zA-Z0-9_\!#\$%&'\(\)\*\+,\-\./\:;<\=>\?@\[\]\^`\{\|\}~]*$") -DEFAULT_MANIFEST_NAME = 'manifest.tt' -TOOLTOOL_PACKAGE_SUFFIX = '.TOOLTOOL-PACKAGE' + r"^[ a-zA-Z0-9_\!#\$%&'\(\)\*\+,\-\./\:;<\=>\?@\[\]\^`\{\|\}~]*$" +) +DEFAULT_MANIFEST_NAME = "manifest.tt" +TOOLTOOL_PACKAGE_SUFFIX = ".TOOLTOOL-PACKAGE" HAWK_VER = 1 PY3 = sys.version_info[0] == 3 if PY3: - open_attrs = dict(mode='w', encoding='utf-8') six_binary_type = bytes - six_text_type = str - unicode = str # Silence `pyflakes` from reporting `undefined name 'unicode'` in Python 3. + unicode = ( + str # Silence `pyflakes` from reporting `undefined name 'unicode'` in Python 3. + ) import urllib.request as urllib2 - from http.client import HTTPSConnection, HTTPConnection - from urllib.parse import urlparse, urljoin - from urllib.request import Request + from http.client import HTTPConnection, HTTPSConnection from urllib.error import HTTPError, URLError + from urllib.parse import urljoin, urlparse + from urllib.request import Request else: - open_attrs = dict(mode='wb') six_binary_type = str - six_text_type = unicode import urllib2 - from httplib import HTTPSConnection, HTTPConnection - from urllib2 import Request, HTTPError, URLError - from urlparse import urlparse, urljoin + from httplib import HTTPConnection, HTTPSConnection + from urllib2 import HTTPError, Request, URLError + from urlparse import urljoin, urlparse log = logging.getLogger(__name__) +# Vendored code from `redo` module +def retrier(attempts=5, sleeptime=10, max_sleeptime=300, sleepscale=1.5, jitter=1): + """ + This function originates from redo 2.0.3 https://github.com/mozilla-releng/redo + A generator function that sleeps between retries, handles exponential + backoff and jitter. The action you are retrying is meant to run after + retrier yields. + """ + jitter = jitter or 0 # py35 barfs on the next line if jitter is None + if jitter > sleeptime: + # To prevent negative sleep times + raise Exception( + "jitter ({}) must be less than sleep time ({})".format(jitter, sleeptime) + ) + + sleeptime_real = sleeptime + for _ in range(attempts): + log.debug("attempt %i/%i", _ + 1, attempts) + + yield sleeptime_real + + if jitter: + sleeptime_real = sleeptime + random.uniform(-jitter, jitter) + # our jitter should scale along with the sleeptime + jitter = jitter * sleepscale + else: + sleeptime_real = sleeptime + + sleeptime *= sleepscale + + if sleeptime_real > max_sleeptime: + sleeptime_real = max_sleeptime + + # Don't need to sleep the last time + if _ < attempts - 1: + log.debug( + "sleeping for %.2fs (attempt %i/%i)", sleeptime_real, _ + 1, attempts + ) + time.sleep(sleeptime_real) + + +def retry( + action, + attempts=5, + sleeptime=60, + max_sleeptime=5 * 60, + sleepscale=1.5, + jitter=1, + retry_exceptions=(Exception,), + cleanup=None, + args=(), + kwargs={}, + log_args=True, +): + """ + This function originates from redo 2.0.3 https://github.com/mozilla-releng/redo + Calls an action function until it succeeds, or we give up. + """ + assert callable(action) + assert not cleanup or callable(cleanup) + + action_name = getattr(action, "__name__", action) + if log_args and (args or kwargs): + log_attempt_args = ( + "retry: calling %s with args: %s," " kwargs: %s, attempt #%d", + action_name, + args, + kwargs, + ) + else: + log_attempt_args = ("retry: calling %s, attempt #%d", action_name) + + if max_sleeptime < sleeptime: + log.debug("max_sleeptime %d less than sleeptime %d", max_sleeptime, sleeptime) + + n = 1 + for _ in retrier( + attempts=attempts, + sleeptime=sleeptime, + max_sleeptime=max_sleeptime, + sleepscale=sleepscale, + jitter=jitter, + ): + try: + logfn = log.info if n != 1 else log.debug + logfn_args = log_attempt_args + (n,) + logfn(*logfn_args) + return action(*args, **kwargs) + except retry_exceptions: + log.debug("retry: Caught exception: ", exc_info=True) + if cleanup: + cleanup() + if n == attempts: + log.info("retry: Giving up on %s", action_name) + raise + continue + finally: + n += 1 + + +def retriable(*retry_args, **retry_kwargs): + """ + This function originates from redo 2.0.3 https://github.com/mozilla-releng/redo + A decorator factory for retry(). Wrap your function in @retriable(...) to + give it retry powers! + """ + + def _retriable_factory(func): + @wraps(func) + def _retriable_wrapper(*args, **kwargs): + return retry(func, args=args, kwargs=kwargs, *retry_args, **retry_kwargs) + + return _retriable_wrapper + + return _retriable_factory + + +# end of vendored code from redo module + + def request_has_data(req): if PY3: return req.data is not None return req.has_data() -def to_binary(val): - if isinstance(val, six_text_type): - return val.encode('utf-8') - return val - - -def to_text(val): - if isinstance(val, six_binary_type): - return val.decode('utf-8') - return val - - def get_hexdigest(val): - return hashlib.sha512(to_binary(val)).hexdigest() + return hashlib.sha512(val).hexdigest() class FileRecordJSONEncoderException(Exception): @@ -113,7 +219,6 @@ class InvalidManifest(Exception): class ExceptionWithFilename(Exception): - def __init__(self, filename): Exception.__init__(self) self.filename = filename @@ -142,22 +247,24 @@ class BadHeaderValue(Exception): def parse_url(url): url_parts = urlparse(url) url_dict = { - 'scheme': url_parts.scheme, - 'hostname': url_parts.hostname, - 'port': url_parts.port, - 'path': url_parts.path, - 'resource': url_parts.path, - 'query': url_parts.query, + "scheme": url_parts.scheme, + "hostname": url_parts.hostname, + "port": url_parts.port, + "path": url_parts.path, + "resource": url_parts.path, + "query": url_parts.query, } - if len(url_dict['query']) > 0: - url_dict['resource'] = '%s?%s' % (url_dict['resource'], # pragma: no cover - url_dict['query']) + if len(url_dict["query"]) > 0: + url_dict["resource"] = "%s?%s" % ( + url_dict["resource"], # pragma: no cover + url_dict["query"], + ) if url_parts.port is None: - if url_parts.scheme == 'http': - url_dict['port'] = 80 - elif url_parts.scheme == 'https': # pragma: no cover - url_dict['port'] = 443 + if url_parts.scheme == "http": + url_dict["port"] = 80 + elif url_parts.scheme == "https": # pragma: no cover + url_dict["port"] = 443 return url_dict @@ -171,110 +278,119 @@ def random_string(length): def prepare_header_val(val): if isinstance(val, six_binary_type): - val = val.decode('utf-8') + val = val.decode("utf-8") if not REQUEST_HEADER_ATTRIBUTE_CHARS.match(val): raise BadHeaderValue( # pragma: no cover - 'header value value={val} contained an illegal character'.format(val=repr(val))) + "header value value={val} contained an illegal character".format( + val=repr(val) + ) + ) return val def parse_content_type(content_type): # pragma: no cover if content_type: - return content_type.split(';')[0].strip().lower() + return content_type.split(";")[0].strip().lower() else: - return '' + return "" def calculate_payload_hash(algorithm, payload, content_type): # pragma: no cover parts = [ - part if isinstance(part, six_binary_type) else part.encode('utf8') - for part in ['hawk.' + str(HAWK_VER) + '.payload\n', - parse_content_type(content_type) + '\n', - payload or '', - '\n', - ] + part if isinstance(part, six_binary_type) else part.encode("utf8") + for part in [ + "hawk." + str(HAWK_VER) + ".payload\n", + parse_content_type(content_type) + "\n", + payload or "", + "\n", + ] ] p_hash = hashlib.new(algorithm) - p_hash.update(''.join(parts)) + for p in parts: + p_hash.update(p) - log.debug('calculating payload hash from:\n{parts}'.format(parts=pprint.pformat(parts))) + log.debug( + "calculating payload hash from:\n{parts}".format(parts=pprint.pformat(parts)) + ) return base64.b64encode(p_hash.digest()) def validate_taskcluster_credentials(credentials): - if not hasattr(credentials, '__getitem__'): - raise InvalidCredentials('credentials must be a dict-like object') # pragma: no cover + if not hasattr(credentials, "__getitem__"): + raise InvalidCredentials( + "credentials must be a dict-like object" + ) # pragma: no cover try: - credentials['clientId'] - credentials['accessToken'] + credentials["clientId"] + credentials["accessToken"] except KeyError: # pragma: no cover etype, val, tb = sys.exc_info() - raise InvalidCredentials('{etype}: {val}'.format(etype=etype, val=val)) + raise InvalidCredentials("{etype}: {val}".format(etype=etype, val=val)) def normalize_header_attr(val): if isinstance(val, six_binary_type): - return val.decode('utf-8') + return val.decode("utf-8") return val # pragma: no cover -def normalize_string(mac_type, - timestamp, - nonce, - method, - name, - host, - port, - content_hash, - ): - return '\n'.join([ - normalize_header_attr(header) - # The blank lines are important. They follow what the Node Hawk lib does. - for header in ['hawk.' + str(HAWK_VER) + '.' + mac_type, - timestamp, - nonce, - method or '', - name or '', - host, - port, - content_hash or '', - '', # for ext which is empty in this case - '', # Add trailing new line. - ] - ]) +def normalize_string( + mac_type, + timestamp, + nonce, + method, + name, + host, + port, + content_hash, +): + return "\n".join( + [ + normalize_header_attr(header) + # The blank lines are important. They follow what the Node Hawk lib does. + for header in [ + "hawk." + str(HAWK_VER) + "." + mac_type, + timestamp, + nonce, + method or "", + name or "", + host, + port, + content_hash or "", + "", # for ext which is empty in this case + "", # Add trailing new line. + ] + ] + ) -def calculate_mac(mac_type, - access_token, - algorithm, - timestamp, - nonce, - method, - name, - host, - port, - content_hash, - ): - normalized = normalize_string(mac_type, - timestamp, - nonce, - method, - name, - host, - port, - content_hash) - log.debug(u'normalized resource for mac calc: {norm}'.format(norm=normalized)) +def calculate_mac( + mac_type, + access_token, + algorithm, + timestamp, + nonce, + method, + name, + host, + port, + content_hash, +): + normalized = normalize_string( + mac_type, timestamp, nonce, method, name, host, port, content_hash + ) + log.debug(u"normalized resource for mac calc: {norm}".format(norm=normalized)) digestmod = getattr(hashlib, algorithm) if not isinstance(normalized, six_binary_type): - normalized = normalized.encode('utf8') + normalized = normalized.encode("utf8") if not isinstance(access_token, six_binary_type): - access_token = access_token.encode('ascii') + access_token = access_token.encode("ascii") result = hmac.new(access_token, normalized, digestmod) return base64.b64encode(result.digest()) @@ -285,31 +401,36 @@ def make_taskcluster_header(credentials, req): url = req.get_full_url() method = req.get_method() - algorithm = 'sha256' + algorithm = "sha256" timestamp = str(utc_now()) nonce = random_string(6) url_parts = parse_url(url) content_hash = None if request_has_data(req): + if PY3: + data = req.data + else: + data = req.get_data() content_hash = calculate_payload_hash( # pragma: no cover algorithm, - req.get_data(), + data, # maybe we should detect this from req.headers but we anyway expect json - content_type='application/json', + content_type="application/json", ) - mac = calculate_mac('header', - credentials['accessToken'], - algorithm, - timestamp, - nonce, - method, - url_parts['resource'], - url_parts['hostname'], - str(url_parts['port']), - content_hash, - ) + mac = calculate_mac( + "header", + credentials["accessToken"], + algorithm, + timestamp, + nonce, + method, + url_parts["resource"], + url_parts["hostname"], + str(url_parts["port"]), + content_hash, + ) header = u'Hawk mac="{}"'.format(prepare_header_val(mac)) @@ -318,24 +439,32 @@ def make_taskcluster_header(credentials, req): header = u'{header}, id="{id}", ts="{ts}", nonce="{nonce}"'.format( header=header, - id=prepare_header_val(credentials['clientId']), + id=prepare_header_val(credentials["clientId"]), ts=prepare_header_val(timestamp), nonce=prepare_header_val(nonce), ) - log.debug('Hawk header for URL={} method={}: {}'.format(url, method, header)) + log.debug("Hawk header for URL={} method={}: {}".format(url, method, header)) return header class FileRecord(object): - - def __init__(self, filename, size, digest, algorithm, unpack=False, - version=None, visibility=None): + def __init__( + self, + filename, + size, + digest, + algorithm, + unpack=False, + version=None, + visibility=None, + ): object.__init__(self) - if '/' in filename or '\\' in filename: + if "/" in filename or "\\" in filename: log.error( - "The filename provided contains path information and is, therefore, invalid.") + "The filename provided contains path information and is, therefore, invalid." + ) raise BadFilenameException(filename=filename) self.filename = filename self.size = size @@ -348,12 +477,14 @@ class FileRecord(object): def __eq__(self, other): if self is other: return True - if self.filename == other.filename and \ - self.size == other.size and \ - self.digest == other.digest and \ - self.algorithm == other.algorithm and \ - self.version == other.version and \ - self.visibility == other.visibility: + if ( + self.filename == other.filename + and self.size == other.size + and self.digest == other.digest + and self.algorithm == other.algorithm + and self.version == other.version + and self.visibility == other.visibility + ): return True else: return False @@ -365,9 +496,18 @@ class FileRecord(object): return repr(self) def __repr__(self): - return "%s.%s(filename='%s', size=%s, digest='%s', algorithm='%s', visibility=%r)" % ( - __name__, self.__class__.__name__, self.filename, self.size, - self.digest, self.algorithm, self.visibility) + return ( + "%s.%s(filename='%s', size=%s, digest='%s', algorithm='%s', visibility=%r)" + % ( + __name__, + self.__class__.__name__, + self.filename, + self.size, + self.digest, + self.algorithm, + self.visibility, + ) + ) def present(self): # Doesn't check validity @@ -377,17 +517,15 @@ class FileRecord(object): if self.present(): return self.size == os.path.getsize(self.filename) else: - log.debug( - "trying to validate size on a missing file, %s", self.filename) + log.debug("trying to validate size on a missing file, %s", self.filename) raise MissingFileException(filename=self.filename) def validate_digest(self): if self.present(): - with open(self.filename, 'rb') as f: + with open(self.filename, "rb") as f: return self.digest == digest_file(f, self.algorithm) else: - log.debug( - "trying to validate digest on a missing file, %s', self.filename") + log.debug("trying to validate digest on a missing file, %s', self.filename") raise MissingFileException(filename=self.filename) def validate(self): @@ -406,35 +544,40 @@ class FileRecord(object): def create_file_record(filename, algorithm): - fo = open(filename, 'rb') + fo = open(filename, "rb") stored_filename = os.path.split(filename)[1] - fr = FileRecord(stored_filename, os.path.getsize( - filename), digest_file(fo, algorithm), algorithm) + fr = FileRecord( + stored_filename, + os.path.getsize(filename), + digest_file(fo, algorithm), + algorithm, + ) fo.close() return fr class FileRecordJSONEncoder(json.JSONEncoder): - def encode_file_record(self, obj): if not issubclass(type(obj), FileRecord): - err = "FileRecordJSONEncoder is only for FileRecord and lists of FileRecords, " \ - "not %s" % obj.__class__.__name__ + err = ( + "FileRecordJSONEncoder is only for FileRecord and lists of FileRecords, " + "not %s" % obj.__class__.__name__ + ) log.warn(err) raise FileRecordJSONEncoderException(err) else: rv = { - 'filename': obj.filename, - 'size': obj.size, - 'algorithm': obj.algorithm, - 'digest': obj.digest, + "filename": obj.filename, + "size": obj.size, + "algorithm": obj.algorithm, + "digest": obj.digest, } if obj.unpack: - rv['unpack'] = True + rv["unpack"] = True if obj.version: - rv['version'] = obj.version + rv["version"] = obj.version if obj.visibility is not None: - rv['visibility'] = obj.visibility + rv["visibility"] = obj.visibility return rv def default(self, f): @@ -452,6 +595,7 @@ class FileRecordJSONDecoder(json.JSONDecoder): """I help the json module materialize a FileRecord from a JSON file. I understand FileRecords and lists of FileRecords. I ignore things that I don't expect for now""" + # TODO: make this more explicit in what it's looking for # and error out on unexpected things @@ -464,10 +608,10 @@ class FileRecordJSONDecoder(json.JSONDecoder): record_list.append(record) return record_list required_fields = [ - 'filename', - 'size', - 'algorithm', - 'digest', + "filename", + "size", + "algorithm", + "digest", ] if isinstance(obj, dict): missing = False @@ -477,12 +621,18 @@ class FileRecordJSONDecoder(json.JSONDecoder): break if not missing: - unpack = obj.get('unpack', False) - version = obj.get('version', None) - visibility = obj.get('visibility', None) + unpack = obj.get("unpack", False) + version = obj.get("version", None) + visibility = obj.get("visibility", None) rv = FileRecord( - obj['filename'], obj['size'], obj['digest'], obj['algorithm'], - unpack, version, visibility) + obj["filename"], + obj["size"], + obj["digest"], + obj["algorithm"], + unpack, + version, + visibility, + ) log.debug("materialized %s" % rv) return rv return obj @@ -495,7 +645,7 @@ class FileRecordJSONDecoder(json.JSONDecoder): class Manifest(object): - valid_formats = ('json',) + valid_formats = ("json",) def __init__(self, file_records=None): self.file_records = file_records or [] @@ -504,7 +654,7 @@ class Manifest(object): if self is other: return True if len(self.file_records) != len(other.file_records): - log.debug('Manifests differ in number of files') + log.debug("Manifests differ in number of files") return False # sort the file records by filename before comparing mine = sorted((fr.filename, fr) for fr in self.file_records) @@ -536,39 +686,44 @@ class Manifest(object): def validate(self): return all(i.validate() for i in self.file_records) - def load(self, data_file, fmt='json'): + def load(self, data_file, fmt="json"): assert fmt in self.valid_formats - if fmt == 'json': + if fmt == "json": try: self.file_records.extend( - json.load(data_file, cls=FileRecordJSONDecoder)) + json.load(data_file, cls=FileRecordJSONDecoder) + ) except ValueError: raise InvalidManifest("trying to read invalid manifest file") - def loads(self, data_string, fmt='json'): + def loads(self, data_string, fmt="json"): assert fmt in self.valid_formats - if fmt == 'json': + if fmt == "json": try: self.file_records.extend( - json.loads(data_string, cls=FileRecordJSONDecoder)) + json.loads(data_string, cls=FileRecordJSONDecoder) + ) except ValueError: raise InvalidManifest("trying to read invalid manifest file") - def dump(self, output_file, fmt='json'): + def dump(self, output_file, fmt="json"): assert fmt in self.valid_formats - if fmt == 'json': + if fmt == "json": return json.dump( - self.file_records, output_file, - indent=2, separators=(',', ': '), + self.file_records, + output_file, + indent=2, + separators=(",", ": "), cls=FileRecordJSONEncoder, ) - def dumps(self, fmt='json'): + def dumps(self, fmt="json"): assert fmt in self.valid_formats - if fmt == 'json': + if fmt == "json": return json.dumps( self.file_records, - indent=2, separators=(',', ': '), + indent=2, + separators=(",", ": "), cls=FileRecordJSONEncoder, ) @@ -582,8 +737,8 @@ def digest_file(f, a): while data: h.update(data) data = f.read(chunk_size) - name = repr(f.name) if hasattr(f, 'name') else 'a file' - log.debug('hashed %s with %s to be %s', name, a, h.hexdigest()) + name = repr(f.name) if hasattr(f, "name") else "a file" + log.debug("hashed %s with %s to be %s", name, a, h.hexdigest()) return h.hexdigest() @@ -594,7 +749,7 @@ def execute(cmd): line = process.stdout.readline() if not line: break - log.info(line.replace('\n', ' ')) + log.info(line.replace("\n", " ")) return process.wait() == 0 @@ -602,14 +757,13 @@ def open_manifest(manifest_file): """I know how to take a filename and load it into a Manifest object""" if os.path.exists(manifest_file): manifest = Manifest() - with open(manifest_file, "rb") as f: + with open(manifest_file, "r" if PY3 else "rb") as f: manifest.load(f) log.debug("loaded manifest from file '%s'" % manifest_file) return manifest else: log.debug("tried to load absent file '%s' as manifest" % manifest_file) - raise InvalidManifest( - "manifest file '%s' does not exist" % manifest_file) + raise InvalidManifest("manifest file '%s' does not exist" % manifest_file) def list_manifest(manifest_file): @@ -617,15 +771,22 @@ def list_manifest(manifest_file): try: manifest = open_manifest(manifest_file) except InvalidManifest as e: - log.error("failed to load manifest file at '%s': %s" % ( - manifest_file, - str(e), - )) + log.error( + "failed to load manifest file at '%s': %s" + % ( + manifest_file, + str(e), + ) + ) return False for f in manifest.file_records: - print("{}\t{}\t{}".format("P" if f.present() else "-", - "V" if f.present() and f.validate() else "-", - f.filename)) + print( + "{}\t{}\t{}".format( + "P" if f.present() else "-", + "V" if f.present() and f.validate() else "-", + f.filename, + ) + ) return True @@ -635,10 +796,13 @@ def validate_manifest(manifest_file): try: manifest = open_manifest(manifest_file) except InvalidManifest as e: - log.error("failed to load manifest file at '%s': %s" % ( - manifest_file, - str(e), - )) + log.error( + "failed to load manifest file at '%s': %s" + % ( + manifest_file, + str(e), + ) + ) return False invalid_files = [] absent_files = [] @@ -677,13 +841,17 @@ def add_files(manifest_file, algorithm, filenames, version, visibility, unpack): log.debug("appending a new file record to manifest file") add = True for fr in old_manifest.file_records: - log.debug("manifest file has '%s'" % "', ".join( - [x.filename for x in old_manifest.file_records])) + log.debug( + "manifest file has '%s'" + % "', ".join([x.filename for x in old_manifest.file_records]) + ) if new_fr == fr: log.info("file already in old_manifest") add = False elif filename == fr.filename: - log.error("manifest already contains a different file named %s" % filename) + log.error( + "manifest already contains a different file named %s" % filename + ) add = False if add: new_manifest.file_records.append(new_fr) @@ -695,8 +863,12 @@ def add_files(manifest_file, algorithm, filenames, version, visibility, unpack): for old_fr in old_manifest.file_records: if old_fr.filename not in new_filenames: new_manifest.file_records.append(old_fr) - with open(manifest_file, **open_attrs) as output: - new_manifest.dump(output, fmt='json') + if PY3: + with open(manifest_file, mode="w") as output: + new_manifest.dump(output, fmt="json") + else: + with open(manifest_file, mode="wb") as output: + new_manifest.dump(output, fmt="json") return all_files_added @@ -706,7 +878,17 @@ def touch(f): try: os.utime(f, None) except OSError: - log.warn('impossible to update utime of file %s' % f) + log.warn("impossible to update utime of file %s" % f) + + +@contextmanager +@retriable(sleeptime=2) +def request(url, auth_file=None): + req = Request(url) + _authorize(req, auth_file) + with closing(urllib2.urlopen(req)) as f: + log.debug("opened %s for reading" % url) + yield f def fetch_file(base_urls, file_record, grabchunk=1024 * 4, auth_file=None, region=None): @@ -717,42 +899,41 @@ def fetch_file(base_urls, file_record, grabchunk=1024 * 4, auth_file=None, regio fetched_path = None for base_url in base_urls: # Generate the URL for the file on the server side - url = urljoin(base_url, - '%s/%s' % (file_record.algorithm, file_record.digest)) + url = urljoin(base_url, "%s/%s" % (file_record.algorithm, file_record.digest)) if region is not None: - url += '?region=' + region + url += "?region=" + region log.info("Attempting to fetch from '%s'..." % base_url) # Well, the file doesn't exist locally. Let's fetch it. try: - req = Request(url) - _authorize(req, auth_file) - f = urllib2.urlopen(req) - log.debug("opened %s for reading" % url) - with open(temp_path, **open_attrs) as out: + with request(url, auth_file) as f, open(temp_path, mode="wb") as out: k = True size = 0 while k: # TODO: print statistics as file transfers happen both for info and to stop # buildbot timeouts indata = f.read(grabchunk) - if PY3: - indata = to_text(indata) out.write(indata) size += len(indata) if len(indata) == 0: k = False - log.info("File %s fetched from %s as %s" % - (file_record.filename, base_url, temp_path)) + log.info( + "File %s fetched from %s as %s" + % (file_record.filename, base_url, temp_path) + ) fetched_path = temp_path break except (URLError, HTTPError, ValueError): - log.info("...failed to fetch '%s' from %s" % - (file_record.filename, base_url), exc_info=True) + log.info( + "...failed to fetch '%s' from %s" % (file_record.filename, base_url), + exc_info=True, + ) except IOError: # pragma: no cover - log.info("failed to write to temporary file for '%s'" % - file_record.filename, exc_info=True) + log.info( + "failed to write to temporary file for '%s'" % file_record.filename, + exc_info=True, + ) # cleanup temp file in case of issues if fetched_path: @@ -768,16 +949,43 @@ def fetch_file(base_urls, file_record, grabchunk=1024 * 4, auth_file=None, regio def clean_path(dirname): """Remove a subtree if is exists. Helper for unpack_file().""" if os.path.exists(dirname): - log.info('rm tree: %s' % dirname) + log.info("rm tree: %s" % dirname) shutil.rmtree(dirname) CHECKSUM_SUFFIX = ".checksum" +def validate_tar_member(member, path): + def _is_within_directory(directory, target): + real_directory = os.path.realpath(directory) + real_target = os.path.realpath(target) + prefix = os.path.commonprefix([real_directory, real_target]) + return prefix == real_directory + + member_path = os.path.join(path, member.name) + if not _is_within_directory(path, member_path): + raise Exception("Attempted path traversal in tar file: " + member.name) + if member.issym(): + link_path = os.path.join(os.path.dirname(member_path), member.linkname) + if not _is_within_directory(path, link_path): + raise Exception("Attempted link path traversal in tar file: " + member.name) + if member.mode & (stat.S_ISUID | stat.S_ISGID): + raise Exception("Attempted setuid or setgid in tar file: " + member.name) + + +def safe_extract(tar, path=".", *, numeric_owner=False): + def _files(tar, path): + for member in tar: + validate_tar_member(member, path) + yield member + + tar.extractall(path, members=_files(tar, path), numeric_owner=numeric_owner) + + def unpack_file(filename): """Untar `filename`, assuming it is uncompressed or compressed with bzip2, - xz, gzip, or unzip a zip file. The file is assumed to contain a single + xz, gzip, zst, or unzip a zip file. The file is assumed to contain a single directory with a name matching the base of the given filename. Xz support is handled by shelling out to 'tar'.""" if os.path.isfile(filename) and tarfile.is_tarfile(filename): @@ -785,26 +993,34 @@ def unpack_file(filename): base_file, tar_ext = os.path.splitext(tar_file) clean_path(base_file) log.info('untarring "%s"' % filename) - tar = tarfile.open(filename) - tar.extractall() - tar.close() - elif os.path.isfile(filename) and filename.endswith('.tar.xz'): - base_file = filename.replace('.tar.xz', '') + with tarfile.open(filename) as tar: + safe_extract(tar) + elif os.path.isfile(filename) and filename.endswith(".tar.xz"): + base_file = filename.replace(".tar.xz", "") clean_path(base_file) log.info('untarring "%s"' % filename) # Not using tar -Jxf because it fails on Windows for some reason. - process = Popen(['xz', '-d', '-c', filename], stdout=PIPE) + process = Popen(["xz", "-d", "-c", filename], stdout=PIPE) stdout, stderr = process.communicate() if process.returncode != 0: return False fileobj = BytesIO() fileobj.write(stdout) fileobj.seek(0) - tar = tarfile.open(fileobj=fileobj, mode='r|') - tar.extractall() - tar.close() + with tarfile.open(fileobj=fileobj, mode="r|") as tar: + safe_extract(tar) + elif os.path.isfile(filename) and filename.endswith(".tar.zst"): + import zstandard + + base_file = filename.replace(".tar.zst", "") + clean_path(base_file) + log.info('untarring "%s"' % filename) + dctx = zstandard.ZstdDecompressor() + with dctx.stream_reader(open(filename, "rb")) as fileobj: + with tarfile.open(fileobj=fileobj, mode="r|") as tar: + safe_extract(tar) elif os.path.isfile(filename) and zipfile.is_zipfile(filename): - base_file = filename.replace('.zip', '') + base_file = filename.replace(".zip", "") clean_path(base_file) log.info('unzipping "%s"' % filename) z = zipfile.ZipFile(filename) @@ -816,16 +1032,25 @@ def unpack_file(filename): return True -def fetch_files(manifest_file, base_urls, filenames=[], cache_folder=None, - auth_file=None, region=None): +def fetch_files( + manifest_file, + base_urls, + filenames=[], + cache_folder=None, + auth_file=None, + region=None, +): # Lets load the manifest file try: manifest = open_manifest(manifest_file) except InvalidManifest as e: - log.error("failed to load manifest file at '%s': %s" % ( - manifest_file, - str(e), - )) + log.error( + "failed to load manifest file at '%s': %s" + % ( + manifest_file, + str(e), + ) + ) return False # we want to track files already in current working directory AND valid @@ -852,21 +1077,27 @@ def fetch_files(manifest_file, base_urls, filenames=[], cache_folder=None, # we have an invalid file here, better to cleanup! # this invalid file needs to be replaced with a good one # from the local cash or fetched from a tooltool server - log.info("File %s is present locally but it is invalid, so I will remove it " - "and try to fetch it" % f.filename) + log.info( + "File %s is present locally but it is invalid, so I will remove it " + "and try to fetch it" % f.filename + ) os.remove(os.path.join(os.getcwd(), f.filename)) # check if file is already in cache if cache_folder and f.filename not in present_files: try: - shutil.copy(os.path.join(cache_folder, f.digest), - os.path.join(os.getcwd(), f.filename)) - log.info("File %s retrieved from local cache %s" % - (f.filename, cache_folder)) + shutil.copy( + os.path.join(cache_folder, f.digest), + os.path.join(os.getcwd(), f.filename), + ) + log.info( + "File %s retrieved from local cache %s" % (f.filename, cache_folder) + ) touch(os.path.join(cache_folder, f.digest)) filerecord_for_validation = FileRecord( - f.filename, f.size, f.digest, f.algorithm) + f.filename, f.size, f.digest, f.algorithm + ) if filerecord_for_validation.validate(): present_files.append(f.filename) if f.unpack: @@ -874,13 +1105,17 @@ def fetch_files(manifest_file, base_urls, filenames=[], cache_folder=None, else: # the file copied from the cache is invalid, better to # clean up the cache version itself as well - log.warn("File %s retrieved from cache is invalid! I am deleting it from the " - "cache as well" % f.filename) + log.warn( + "File %s retrieved from cache is invalid! I am deleting it from the " + "cache as well" % f.filename + ) os.remove(os.path.join(os.getcwd(), f.filename)) os.remove(os.path.join(cache_folder, f.digest)) except IOError: - log.info("File %s not present in local cache folder %s" % - (f.filename, cache_folder)) + log.info( + "File %s not present in local cache folder %s" + % (f.filename, cache_folder) + ) # now I will try to fetch all files which are not already present and # valid, appending a suffix to avoid race conditions @@ -889,9 +1124,13 @@ def fetch_files(manifest_file, base_urls, filenames=[], cache_folder=None, # is a non empty list it can be used to filter if filename is in # present_files, it means that I have it already because it was already # either in the working dir or in the cache - if (f.filename in filenames or len(filenames) == 0) and f.filename not in present_files: + if ( + f.filename in filenames or len(filenames) == 0 + ) and f.filename not in present_files: log.debug("fetching %s" % f.filename) - temp_file_name = fetch_file(base_urls, f, auth_file=auth_file, region=region) + temp_file_name = fetch_file( + base_urls, f, auth_file=auth_file, region=region + ) if temp_file_name: fetched_files.append((f, temp_file_name)) else: @@ -905,15 +1144,20 @@ def fetch_files(manifest_file, base_urls, filenames=[], cache_folder=None, # this is why filerecord_for_validation is created filerecord_for_validation = FileRecord( - temp_file_name, localfile.size, localfile.digest, localfile.algorithm) + temp_file_name, localfile.size, localfile.digest, localfile.algorithm + ) if filerecord_for_validation.validate(): # great! # I can rename the temp file - log.info("File integrity verified, renaming %s to %s" % - (temp_file_name, localfile.filename)) - os.rename(os.path.join(os.getcwd(), temp_file_name), - os.path.join(os.getcwd(), localfile.filename)) + log.info( + "File integrity verified, renaming %s to %s" + % (temp_file_name, localfile.filename) + ) + os.rename( + os.path.join(os.getcwd(), temp_file_name), + os.path.join(os.getcwd(), localfile.filename), + ) if localfile.unpack: unpack_files.append(localfile.filename) @@ -926,14 +1170,21 @@ def fetch_files(manifest_file, base_urls, filenames=[], cache_folder=None, if not os.path.exists(cache_folder): log.info("Creating cache in %s..." % cache_folder) os.makedirs(cache_folder, 0o0700) - shutil.copy(os.path.join(os.getcwd(), localfile.filename), - os.path.join(cache_folder, localfile.digest)) - log.info("Local cache %s updated with %s" % (cache_folder, - localfile.filename)) + shutil.copy( + os.path.join(os.getcwd(), localfile.filename), + os.path.join(cache_folder, localfile.digest), + ) + log.info( + "Local cache %s updated with %s" + % (cache_folder, localfile.filename) + ) touch(os.path.join(cache_folder, localfile.digest)) except (OSError, IOError): - log.warning('Impossible to add file %s to cache folder %s' % - (localfile.filename, cache_folder), exc_info=True) + log.warning( + "Impossible to add file %s to cache folder %s" + % (localfile.filename, cache_folder), + exc_info=True, + ) else: failed_files.append(localfile.filename) log.error("'%s'" % filerecord_for_validation.describe()) @@ -946,20 +1197,18 @@ def fetch_files(manifest_file, base_urls, filenames=[], cache_folder=None, # If we failed to fetch or validate a file, we need to fail if len(failed_files) > 0: - log.error("The following files failed: '%s'" % - "', ".join(failed_files)) + log.error("The following files failed: '%s'" % "', ".join(failed_files)) return False return True def freespace(p): "Returns the number of bytes free under directory `p`" - if sys.platform == 'win32': # pragma: no cover + if sys.platform == "win32": # pragma: no cover # os.statvfs doesn't work on Windows import win32file - secsPerClus, bytesPerSec, nFreeClus, totClus = win32file.GetDiskFreeSpace( - p) + secsPerClus, bytesPerSec, nFreeClus, totClus = win32file.GetDiskFreeSpace(p) return secsPerClus * bytesPerSec * nFreeClus else: r = os.statvfs(p) @@ -1000,94 +1249,102 @@ def purge(folder, gigs): def _log_api_error(e): - if hasattr(e, 'hdrs') and e.hdrs['content-type'] == 'application/json': + if hasattr(e, "hdrs") and e.hdrs["content-type"] == "application/json": json_resp = json.load(e.fp) - log.error("%s: %s" % (json_resp['error']['name'], - json_resp['error']['description'])) + log.error( + "%s: %s" % (json_resp["error"]["name"], json_resp["error"]["description"]) + ) else: log.exception("Error making RelengAPI request:") def _authorize(req, auth_file): - if not auth_file: - return - is_taskcluster_auth = False - with open(auth_file) as f: - auth_file_content = f.read().strip() + + if not auth_file: try: - auth_file_content = json.loads(auth_file_content) + taskcluster_env_keys = { + "clientId": "TASKCLUSTER_CLIENT_ID", + "accessToken": "TASKCLUSTER_ACCESS_TOKEN", + } + auth_content = {k: os.environ[v] for k, v in taskcluster_env_keys.items()} is_taskcluster_auth = True - except Exception: - pass + except KeyError: + return + else: + with open(auth_file) as f: + auth_content = f.read().strip() + try: + auth_content = json.loads(auth_content) + is_taskcluster_auth = True + except Exception: + pass if is_taskcluster_auth: - taskcluster_header = make_taskcluster_header(auth_file_content, req) + taskcluster_header = make_taskcluster_header(auth_content, req) log.debug("Using taskcluster credentials in %s" % auth_file) - req.add_unredirected_header('Authorization', taskcluster_header) + req.add_unredirected_header("Authorization", taskcluster_header) else: log.debug("Using Bearer token in %s" % auth_file) - req.add_unredirected_header('Authorization', 'Bearer %s' % auth_file_content) + req.add_unredirected_header("Authorization", "Bearer %s" % auth_content) def _send_batch(base_url, auth_file, batch, region): - url = urljoin(base_url, 'upload') + url = urljoin(base_url, "upload") if region is not None: url += "?region=" + region + data = json.dumps(batch) if PY3: - data = to_binary(json.dumps(batch)) - else: - data = json.dumps(batch) - req = Request(url, data, {'Content-Type': 'application/json'}) + data = data.encode("utf-8") + req = Request(url, data, {"Content-Type": "application/json"}) _authorize(req, auth_file) try: resp = urllib2.urlopen(req) except (URLError, HTTPError) as e: _log_api_error(e) return None - return json.load(resp)['result'] + return json.load(resp)["result"] def _s3_upload(filename, file): # urllib2 does not support streaming, so we fall back to good old httplib - url = urlparse(file['put_url']) - cls = HTTPSConnection if url.scheme == 'https' else HTTPConnection - host, port = url.netloc.split(':') if ':' in url.netloc else (url.netloc, 443) + url = urlparse(file["put_url"]) + cls = HTTPSConnection if url.scheme == "https" else HTTPConnection + host, port = url.netloc.split(":") if ":" in url.netloc else (url.netloc, 443) port = int(port) conn = cls(host, port) try: req_path = "%s?%s" % (url.path, url.query) if url.query else url.path - with open(filename, 'rb') as f: + with open(filename, "rb") as f: content = f.read() content_length = len(content) f.seek(0) conn.request( - 'PUT', + "PUT", req_path, f, { - 'Content-Type': 'application/octet-stream', - 'Content-Length': str(content_length), + "Content-Type": "application/octet-stream", + "Content-Length": str(content_length), }, ) resp = conn.getresponse() resp_body = resp.read() conn.close() if resp.status != 200: - raise RuntimeError("Non-200 return from AWS: %s %s\n%s" % - (resp.status, resp.reason, resp_body)) + raise RuntimeError( + "Non-200 return from AWS: %s %s\n%s" + % (resp.status, resp.reason, resp_body) + ) except Exception: - file['upload_exception'] = sys.exc_info() - file['upload_ok'] = False + file["upload_exception"] = sys.exc_info() + file["upload_ok"] = False else: - file['upload_ok'] = True + file["upload_ok"] = True def _notify_upload_complete(base_url, auth_file, file): - req = Request( - urljoin( - base_url, - 'upload/complete/%(algorithm)s/%(digest)s' % file)) + req = Request(urljoin(base_url, "upload/complete/%(algorithm)s/%(digest)s" % file)) _authorize(req, auth_file) try: urllib2.urlopen(req) @@ -1097,7 +1354,7 @@ def _notify_upload_complete(base_url, auth_file, file): return # 409 indicates that the upload URL hasn't expired yet and we # should retry after a delay - to_wait = int(e.headers.get('X-Retry-After', 60)) + to_wait = int(e.headers.get("X-Retry-After", 60)) log.warning("Waiting %d seconds for upload URLs to expire" % to_wait) time.sleep(to_wait) _notify_upload_complete(base_url, auth_file, file) @@ -1114,39 +1371,38 @@ def upload(manifest, message, base_urls, auth_file, region): # verify the manifest, since we'll need the files present to upload if not manifest.validate(): - log.error('manifest is invalid') + log.error("manifest is invalid") return False if any(fr.visibility is None for fr in manifest.file_records): - log.error('All files in a manifest for upload must have a visibility set') + log.error("All files in a manifest for upload must have a visibility set") # convert the manifest to an upload batch batch = { - 'message': message, - 'files': {}, + "message": message, + "files": {}, } for fr in manifest.file_records: - batch['files'][fr.filename] = { - 'size': fr.size, - 'digest': fr.digest, - 'algorithm': fr.algorithm, - 'visibility': fr.visibility, + batch["files"][fr.filename] = { + "size": fr.size, + "digest": fr.digest, + "algorithm": fr.algorithm, + "visibility": fr.visibility, } # make the upload request resp = _send_batch(base_urls[0], auth_file, batch, region) if not resp: return None - files = resp['files'] + files = resp["files"] # Upload the files, each in a thread. This allows us to start all of the # uploads before any of the URLs expire. threads = {} for filename, file in files.items(): - if 'put_url' in file: + if "put_url" in file: log.info("%s: starting upload" % (filename,)) - thd = threading.Thread(target=_s3_upload, - args=(filename, file)) + thd = threading.Thread(target=_s3_upload, args=(filename, file)) thd.daemon = 1 thd.start() threads[filename] = thd @@ -1161,11 +1417,12 @@ def upload(manifest, message, base_urls, auth_file, region): # _s3_upload has annotated file with result information file = files[filename] thread.join() - if file['upload_ok']: + if file["upload_ok"]: log.info("%s: uploaded" % filename) else: - log.error("%s: failed" % filename, - exc_info=file['upload_exception']) + log.error( + "%s: failed" % filename, exc_info=file["upload_exception"] + ) success = False del threads[filename] @@ -1173,54 +1430,120 @@ def upload(manifest, message, base_urls, auth_file, region): # fails, we don't consider that an error (the server will notice # eventually) for filename, file in files.items(): - if 'put_url' in file and file['upload_ok']: + if "put_url" in file and file["upload_ok"]: log.info("notifying server of upload completion for %s" % (filename,)) _notify_upload_complete(base_urls[0], auth_file, file) return success +def send_operation_on_file(data, base_urls, digest, auth_file): + url = base_urls[0] + url = urljoin(url, "file/sha512/" + digest) + + data = json.dumps(data) + + req = Request(url, data, {"Content-Type": "application/json"}) + req.get_method = lambda: "PATCH" + + _authorize(req, auth_file) + + try: + urllib2.urlopen(req) + except (URLError, HTTPError) as e: + _log_api_error(e) + return False + return True + + +def change_visibility(base_urls, digest, visibility, auth_file): + data = [ + { + "op": "set_visibility", + "visibility": visibility, + } + ] + return send_operation_on_file(data, base_urls, digest, auth_file) + + +def delete_instances(base_urls, digest, auth_file): + data = [ + { + "op": "delete_instances", + } + ] + return send_operation_on_file(data, base_urls, digest, auth_file) + + def process_command(options, args): - """ I know how to take a list of program arguments and + """I know how to take a list of program arguments and start doing the right thing with them""" cmd = args[0] cmd_args = args[1:] - log.debug("processing '%s' command with args '%s'" % - (cmd, '", "'.join(cmd_args))) + log.debug("processing '%s' command with args '%s'" % (cmd, '", "'.join(cmd_args))) log.debug("using options: %s" % options) - if cmd == 'list': - return list_manifest(options['manifest']) - if cmd == 'validate': - return validate_manifest(options['manifest']) - elif cmd == 'add': - return add_files(options['manifest'], options['algorithm'], cmd_args, - options['version'], options['visibility'], - options['unpack']) - elif cmd == 'purge': - if options['cache_folder']: - purge(folder=options['cache_folder'], gigs=options['size']) - else: - log.critical('please specify the cache folder to be purged') - return False - elif cmd == 'fetch': - return fetch_files( - options['manifest'], - options['base_url'], + if cmd == "list": + return list_manifest(options["manifest"]) + if cmd == "validate": + return validate_manifest(options["manifest"]) + elif cmd == "add": + return add_files( + options["manifest"], + options["algorithm"], cmd_args, - cache_folder=options['cache_folder'], + options["version"], + options["visibility"], + options["unpack"], + ) + elif cmd == "purge": + if options["cache_folder"]: + purge(folder=options["cache_folder"], gigs=options["size"]) + else: + log.critical("please specify the cache folder to be purged") + return False + elif cmd == "fetch": + return fetch_files( + options["manifest"], + options["base_url"], + cmd_args, + cache_folder=options["cache_folder"], auth_file=options.get("auth_file"), - region=options.get('region')) - elif cmd == 'upload': - if not options.get('message'): - log.critical('upload command requires a message') + region=options.get("region"), + ) + elif cmd == "upload": + if not options.get("message"): + log.critical("upload command requires a message") return False return upload( - options.get('manifest'), - options.get('message'), - options.get('base_url'), - options.get('auth_file'), - options.get('region')) + options.get("manifest"), + options.get("message"), + options.get("base_url"), + options.get("auth_file"), + options.get("region"), + ) + elif cmd == "change-visibility": + if not options.get("digest"): + log.critical("change-visibility command requires a digest option") + return False + if not options.get("visibility"): + log.critical("change-visibility command requires a visibility option") + return False + return change_visibility( + options.get("base_url"), + options.get("digest"), + options.get("visibility"), + options.get("auth_file"), + ) + elif cmd == "delete": + if not options.get("digest"): + log.critical("change-visibility command requires a digest option") + return False + return delete_instances( + options.get("base_url"), + options.get("digest"), + options.get("auth_file"), + ) else: log.critical('command "%s" is not implemented' % cmd) return False @@ -1229,62 +1552,127 @@ def process_command(options, args): def main(argv, _skip_logging=False): # Set up option parsing parser = optparse.OptionParser() - parser.add_option('-q', '--quiet', default=logging.INFO, - dest='loglevel', action='store_const', const=logging.ERROR) - parser.add_option('-v', '--verbose', - dest='loglevel', action='store_const', const=logging.DEBUG) - parser.add_option('-m', '--manifest', default=DEFAULT_MANIFEST_NAME, - dest='manifest', action='store', - help='specify the manifest file to be operated on') - parser.add_option('-d', '--algorithm', default='sha512', - dest='algorithm', action='store', - help='hashing algorithm to use (only sha512 is allowed)') - parser.add_option('--visibility', default=None, - dest='visibility', choices=['internal', 'public'], - help='Visibility level of this file; "internal" is for ' - 'files that cannot be distributed out of the company ' - 'but not for secrets; "public" files are available to ' - 'anyone without restriction') - parser.add_option('--unpack', default=False, - dest='unpack', action='store_true', - help='Request unpacking this file after fetch.' - ' This is helpful with tarballs.') - parser.add_option('--version', default=None, - dest='version', action='store', - help='Version string for this file. This annotates the ' - 'manifest entry with a version string to help ' - 'identify the contents.') - parser.add_option('-o', '--overwrite', default=False, - dest='overwrite', action='store_true', - help='UNUSED; present for backward compatibility') - parser.add_option('--url', dest='base_url', action='append', - help='RelengAPI URL ending with /tooltool/; default ' - 'is appropriate for Mozilla') - parser.add_option('-c', '--cache-folder', dest='cache_folder', - help='Local cache folder') - parser.add_option('-s', '--size', - help='free space required (in GB)', dest='size', - type='float', default=0.) - parser.add_option('-r', '--region', help='Preferred AWS region for upload or fetch; ' - 'example: --region=us-west-2') - parser.add_option('--message', - help='The "commit message" for an upload; format with a bug number ' - 'and brief comment', - dest='message') - parser.add_option('--authentication-file', - help='Use the RelengAPI token found in the given file to ' - 'authenticate to the RelengAPI server.', - dest='auth_file') + parser.add_option( + "-q", + "--quiet", + default=logging.INFO, + dest="loglevel", + action="store_const", + const=logging.ERROR, + ) + parser.add_option( + "-v", "--verbose", dest="loglevel", action="store_const", const=logging.DEBUG + ) + parser.add_option( + "-m", + "--manifest", + default=DEFAULT_MANIFEST_NAME, + dest="manifest", + action="store", + help="specify the manifest file to be operated on", + ) + parser.add_option( + "-d", + "--algorithm", + default="sha512", + dest="algorithm", + action="store", + help="hashing algorithm to use (only sha512 is allowed)", + ) + parser.add_option( + "--digest", + default=None, + dest="digest", + action="store", + help="digest hash to change visibility for", + ) + parser.add_option( + "--visibility", + default=None, + dest="visibility", + choices=["internal", "public"], + help='Visibility level of this file; "internal" is for ' + "files that cannot be distributed out of the company " + 'but not for secrets; "public" files are available to ' + "anyone without restriction", + ) + parser.add_option( + "--unpack", + default=False, + dest="unpack", + action="store_true", + help="Request unpacking this file after fetch." + " This is helpful with tarballs.", + ) + parser.add_option( + "--version", + default=None, + dest="version", + action="store", + help="Version string for this file. This annotates the " + "manifest entry with a version string to help " + "identify the contents.", + ) + parser.add_option( + "-o", + "--overwrite", + default=False, + dest="overwrite", + action="store_true", + help="UNUSED; present for backward compatibility", + ) + parser.add_option( + "--url", + dest="base_url", + action="append", + help="RelengAPI URL ending with /tooltool/; default " + "is appropriate for Mozilla", + ) + parser.add_option( + "-c", "--cache-folder", dest="cache_folder", help="Local cache folder" + ) + parser.add_option( + "-s", + "--size", + help="free space required (in GB)", + dest="size", + type="float", + default=0.0, + ) + parser.add_option( + "-r", + "--region", + help="Preferred AWS region for upload or fetch; " "example: --region=us-west-2", + ) + parser.add_option( + "--message", + help='The "commit message" for an upload; format with a bug number ' + "and brief comment", + dest="message", + ) + parser.add_option( + "--authentication-file", + help="Use the RelengAPI token found in the given file to " + "authenticate to the RelengAPI server.", + dest="auth_file", + ) (options_obj, args) = parser.parse_args(argv[1:]) - # default the options list if not provided if not options_obj.base_url: - options_obj.base_url = ['https://tooltool.mozilla-releng.net/'] + tooltool_host = os.environ.get("TOOLTOOL_HOST", "tooltool.mozilla-releng.net") + taskcluster_proxy_url = os.environ.get("TASKCLUSTER_PROXY_URL") + if taskcluster_proxy_url: + tooltool_url = "{}/{}".format(taskcluster_proxy_url, tooltool_host) + else: + tooltool_url = "https://{}".format(tooltool_host) + + options_obj.base_url = [tooltool_url] # ensure all URLs have a trailing slash def add_slash(url): - return url if url.endswith('/') else (url + '/') + return url if url.endswith("/") else (url + "/") + options_obj.base_url = [add_slash(u) for u in options_obj.base_url] # expand ~ in --authentication-file @@ -1294,7 +1682,7 @@ def main(argv, _skip_logging=False): # Dictionaries are easier to work with options = vars(options_obj) - log.setLevel(options['loglevel']) + log.setLevel(options["loglevel"]) # Set up logging, for now just to the console if not _skip_logging: # pragma: no cover @@ -1303,11 +1691,11 @@ def main(argv, _skip_logging=False): ch.setFormatter(cf) log.addHandler(ch) - if options['algorithm'] != 'sha512': - parser.error('only --algorithm sha512 is supported') + if options["algorithm"] != "sha512": + parser.error("only --algorithm sha512 is supported") if len(args) < 1: - parser.error('You must specify a command') + parser.error("You must specify a command") return 0 if process_command(options, args) else 1 diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/error.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/error.py index 1b65d225fae..81910a63eb2 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/error.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/error.py @@ -39,6 +39,10 @@ class NoSuchFrameException(BidiException): error_code = "no such frame" +class NoSuchNodeException(BidiException): + error_code = "no such node" + + class NoSuchScriptException(BidiException): error_code = "no such script" diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/browsing_context.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/browsing_context.py index 033929d5ff5..abaf569f928 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/browsing_context.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/bidi/modules/browsing_context.py @@ -1,5 +1,5 @@ import base64 -from typing import Any, Optional, Mapping, MutableMapping +from typing import Any, List, Mapping, MutableMapping, Optional from ._module import BidiModule, command @@ -80,3 +80,41 @@ class BrowsingContext(BidiModule): assert isinstance(result["url"], str) return result + + @command + def print( + self, + context: str, + background: Optional[bool] = None, + margin: Optional[Mapping[str, Any]] = None, + orientation: Optional[str] = None, + page: Optional[Mapping[str, Any]] = None, + page_ranges: Optional[List[str]] = None, + scale: Optional[float] = None, + shrink_to_fit: Optional[bool] = None + ) -> Mapping[str, Any]: + params: MutableMapping[str, Any] = { + "context": context + } + + if background is not None: + params["background"] = background + if margin is not None: + params["margin"] = margin + if orientation is not None: + params["orientation"] = orientation + if page is not None: + params["page"] = page + if page_ranges is not None: + params["pageRanges"] = page_ranges + if scale is not None: + params["scale"] = scale + if shrink_to_fit is not None: + params["shrinkToFit"] = shrink_to_fit + + return params + + @print.result + def _print(self, result: Mapping[str, Any]) -> Any: + assert result["data"] is not None + return result["data"] diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py index ba01e1fe866..851c6722fc2 100644 --- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py +++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/client.py @@ -807,13 +807,12 @@ class Element: """ identifier = "element-6066-11e4-a52e-4f735466cecf" - def __init__(self, id, session): + def __init__(self, session, id): """ Construct a new web element representation. - :param id: Web element UUID which must be unique across - all browsing contexts. :param session: Current ``webdriver.Session``. + :param id: Web element UUID which must be unique across all browsing contexts. """ self.id = id self.session = session @@ -828,7 +827,7 @@ class Element: @classmethod def from_json(cls, json, session): uuid = json[Element.identifier] - return cls(uuid, session) + return cls(session, uuid) def send_element_command(self, method, uri, body=None): url = "element/%s/%s" % (self.id, uri) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py index 93e2a87826c..78e05264d4d 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py @@ -164,10 +164,8 @@ class TagFilter: def __init__(self, tags): self.tags = set(tags) - def __call__(self, test_iter): - for test in test_iter: - if test.tags & self.tags: - yield test + def __call__(self, test): + return test.tags & self.tags class ManifestLoader: @@ -214,6 +212,7 @@ class TestLoader: test_types, run_info, manifest_filters=None, + test_filters=None, chunk_type="none", total_chunks=1, chunk_number=1, @@ -228,6 +227,7 @@ class TestLoader: self.run_info = run_info self.manifest_filters = manifest_filters if manifest_filters is not None else [] + self.test_filters = test_filters if test_filters is not None else [] self.manifests = test_manifests self.tests = None @@ -310,7 +310,9 @@ class TestLoader: inherit_metadata, test_metadata = self.load_metadata(manifest_file, metadata_path, test_path) for test in tests: - yield test_path, test_type, self.get_test(manifest_file, test, inherit_metadata, test_metadata) + wpt_test = self.get_test(manifest_file, test, inherit_metadata, test_metadata) + if all(f(wpt_test) for f in self.test_filters): + yield test_path, test_type, wpt_test def _load_tests(self): """Read in the tests from the manifest file and add them to a queue""" diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_testloader.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_testloader.py index 0936c54ea97..8c8d02a22b9 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_testloader.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_testloader.py @@ -7,7 +7,7 @@ import tempfile import pytest from mozlog import structured -from ..testloader import TestFilter as Filter, TestLoader as Loader +from ..testloader import TestFilter, TestLoader, TagFilter from ..testloader import read_include_from_file from .test_wpttest import make_mock_manifest @@ -46,19 +46,20 @@ def test_loader_h2_tests(): manifest = WPTManifest.from_json("/", manifest_json) # By default, the loader should include the h2 test. - loader = Loader({manifest: {"metadata_path": ""}}, ["testharness"], None) + loader = TestLoader({manifest: {"metadata_path": ""}}, ["testharness"], None) assert "testharness" in loader.tests assert len(loader.tests["testharness"]) == 2 assert len(loader.disabled_tests) == 0 # We can also instruct it to skip them. - loader = Loader({manifest: {"metadata_path": ""}}, ["testharness"], None, include_h2=False) + loader = TestLoader({manifest: {"metadata_path": ""}}, ["testharness"], None, include_h2=False) assert "testharness" in loader.tests assert len(loader.tests["testharness"]) == 1 assert "testharness" in loader.disabled_tests assert len(loader.disabled_tests["testharness"]) == 1 assert loader.disabled_tests["testharness"][0].url == "/a/bar.h2.html" + @pytest.mark.xfail(sys.platform == "win32", reason="NamedTemporaryFile cannot be reopened on Win32") def test_include_file(): @@ -82,6 +83,7 @@ def test_include_file(): assert "/foo/idlharness.https.any.html" in include assert "/foo/idlharness.https.any.worker.html" in include + @pytest.mark.xfail(sys.platform == "win32", reason="NamedTemporaryFile cannot be reopened on Win32") def test_filter_unicode(): @@ -92,4 +94,44 @@ def test_filter_unicode(): f.write(include_ini.encode('utf-8')) f.flush() - Filter(manifest_path=f.name, test_manifests=tests) + TestFilter(manifest_path=f.name, test_manifests=tests) + + +def test_loader_filter_tags(): + manifest_json = { + "items": { + "testharness": { + "a": { + "foo.html": [ + "abcdef123456", + [None, {}], + ], + "bar.html": [ + "uvwxyz987654", + [None, {}], + ], + } + } + }, + "url_base": "/", + "version": 8, + } + manifest = WPTManifest.from_json("/", manifest_json) + + tmpdir_kwargs = {} + if sys.version_info.major >= 3 and sys.version_info.minor >= 10: + tmpdir_kwargs["ignore_cleanup_errors"] = True + with tempfile.TemporaryDirectory(**tmpdir_kwargs) as metadata_path: + a_path = os.path.join(metadata_path, "a") + os.makedirs(a_path) + with open(os.path.join(a_path, "bar.html.ini"), "w") as f: + f.write("tags: [test-include]\n") + + loader = TestLoader({manifest: {"metadata_path": metadata_path}}, ["testharness"], None) + assert len(loader.tests["testharness"]) == 2 + + loader = TestLoader({manifest: {"metadata_path": metadata_path}}, ["testharness"], None, + test_filters=[TagFilter({"test-include"})]) + assert len(loader.tests["testharness"]) == 1 + assert loader.tests["testharness"][0].id == "/a/bar.html" + assert loader.tests["testharness"][0].tags == {"dir:a", "test-include"} diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py index 224a4fde4df..740bb7e9f42 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py @@ -62,10 +62,12 @@ def get_loader(test_paths, product, debug=None, run_info_extras=None, chunker_kw device_serials=kwargs.get("device_serial"), adb_binary=kwargs.get("adb_binary")) - test_manifests = testloader.ManifestLoader(test_paths, force_manifest_update=kwargs["manifest_update"], + test_manifests = testloader.ManifestLoader(test_paths, + force_manifest_update=kwargs["manifest_update"], manifest_download=kwargs["manifest_download"]).load() manifest_filters = [] + test_filters = [] include = kwargs["include"] if kwargs["include_file"]: @@ -74,6 +76,9 @@ def get_loader(test_paths, product, debug=None, run_info_extras=None, chunker_kw if test_groups: include = testloader.update_include_for_groups(test_groups, include) + if kwargs["tags"]: + test_filters.append(testloader.TagFilter(kwargs["tags"])) + if include or kwargs["exclude"] or kwargs["include_manifest"] or kwargs["default_exclude"]: manifest_filters.append(testloader.TestFilter(include=include, exclude=kwargs["exclude"], @@ -87,6 +92,7 @@ def get_loader(test_paths, product, debug=None, run_info_extras=None, chunker_kw kwargs["test_types"], run_info, manifest_filters=manifest_filters, + test_filters=test_filters, chunk_type=kwargs["chunk_type"], total_chunks=kwargs["total_chunks"], chunk_number=kwargs["this_chunk"], diff --git a/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.js b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.js index 76e5bf83b1e..6fff9e9189e 100644 --- a/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.js +++ b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/requestStorageAccessForOrigin.sub.https.window.js @@ -58,6 +58,7 @@ test( promise_setup(async () => { await test_driver.set_permission( { name: 'top-level-storage-access', requestedOrigin }, 'prompt'); + await test_driver.set_permission({name: 'storage-access'}, 'prompt'); }); promise_test( @@ -110,6 +111,29 @@ if (topLevelDocument) { '[' + testPrefix + '] document.requestStorageAccessForOrigin() should be resolved without a user gesture with an existing permission'); + promise_test( + async t => { + const altOrigin = 'https://{{hosts[alt][www]}}:{{ports[https][0]}}'; + t.add_cleanup(async () => { + await test_driver.set_permission( + {name: 'top-level-storage-access', requestedOrigin: altOrigin}, + 'prompt'); + await test_driver.set_permission({name: 'storage-access'}, 'prompt'); + }); + await test_driver.set_permission( + {name: 'top-level-storage-access', requestedOrigin: altOrigin}, + 'granted'); + + await RunCallbackWithGesture(() => { + document.requestStorageAccessForOrigin(altOrigin).then(() => { + RunTestsInIFrame( + 'https://{{hosts[alt][www]}}:{{ports[https][0]}}/top-level-storage-access-api/tentative/resources/requestStorageAccess-integration-iframe.https.html'); + }); + }); + }, + '[' + testPrefix + + '] document.requestStorageAccess() should be resolved without a user gesture after a successful requestStorageAccessForOrigin() call'); + // Create a test with a single-child same-origin iframe. // This will validate that calls to requestStorageAccessForOrigin are rejected // in non-top-level contexts. diff --git a/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccess-integration-iframe.https.html b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccess-integration-iframe.https.html new file mode 100644 index 00000000000..f4db5cf65ec --- /dev/null +++ b/tests/wpt/web-platform-tests/top-level-storage-access-api/tentative/resources/requestStorageAccess-integration-iframe.https.html @@ -0,0 +1,15 @@ + + + + + + + + +
    + diff --git a/tests/wpt/web-platform-tests/wai-aria/README.md b/tests/wpt/web-platform-tests/wai-aria/manual/README.md similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/README.md rename to tests/wpt/web-platform-tests/wai-aria/manual/README.md diff --git a/tests/wpt/web-platform-tests/wai-aria/alertdialog_modal_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/alertdialog_modal_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/alertdialog_modal_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/alertdialog_modal_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/alertdialog_modal_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/alertdialog_modal_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/alertdialog_modal_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/alertdialog_modal_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/application_activedescendant-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/application_activedescendant-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/application_activedescendant-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/application_activedescendant-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/application_activedescendant_value_changes-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/application_activedescendant_value_changes-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/application_activedescendant_value_changes-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/application_activedescendant_value_changes-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_not_declared-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/aria-current_not_declared-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/aria-current_not_declared-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/aria-current_not_declared-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_changes-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_changes-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_changes-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_changes-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_date-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_date-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_date-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_date-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_location-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_location-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_location-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_location-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_page-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_page-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_page-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_page-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_step-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_step-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_step-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_step-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_time-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_time-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_time-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_time-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/aria-current_with_value_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/aria-current_with_value_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-details_pointing_to_details_element-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/aria-details_pointing_to_details_element-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/aria-details_pointing_to_details_element-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/aria-details_pointing_to_details_element-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/aria-details_pointing_to_div_element-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/aria-details_pointing_to_div_element-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/aria-details_pointing_to_div_element-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/aria-details_pointing_to_div_element-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/article_in_feed_posinset_and_setsize-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/article_in_feed_posinset_and_setsize-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/article_in_feed_posinset_and_setsize-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/article_in_feed_posinset_and_setsize-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/article_in_feed_setsize_-1-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/article_in_feed_setsize_-1-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/article_in_feed_setsize_-1-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/article_in_feed_setsize_-1-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/article_not_in_feed_posinset_and_setsize-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/article_not_in_feed_posinset_and_setsize-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/article_not_in_feed_posinset_and_setsize-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/article_not_in_feed_posinset_and_setsize-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/button_haspopup_dialog-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_dialog-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/button_haspopup_dialog-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_dialog-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/button_haspopup_emptystring-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_emptystring-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/button_haspopup_emptystring-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_emptystring-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/button_haspopup_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/button_haspopup_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/button_haspopup_foo-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_foo-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/button_haspopup_foo-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_foo-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/button_haspopup_grid-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_grid-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/button_haspopup_grid-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_grid-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/button_haspopup_listbox-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_listbox-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/button_haspopup_listbox-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_listbox-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/button_haspopup_menu-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_menu-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/button_haspopup_menu-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_menu-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/button_haspopup_tree-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_tree-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/button_haspopup_tree-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_tree-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/button_haspopup_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/button_haspopup_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/button_haspopup_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/button_haspopup_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/button_haspopup_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/button_roledescription_empty-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/button_roledescription_empty-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/button_roledescription_empty-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/button_roledescription_empty-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/button_roledescription_valid-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/button_roledescription_valid-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/button_roledescription_valid-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/button_roledescription_valid-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/button_roledescription_whitespace_only-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/button_roledescription_whitespace_only-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/button_roledescription_whitespace_only-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/button_roledescription_whitespace_only-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/cell-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/cell-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/cell-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/cell-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_div-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-colspan_2_on_div-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_div-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-colspan_2_on_div-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_td_html_colspan_3-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_td_html_colspan_3-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3_with_headers_and_border-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-colspan_2_on_td_html_colspan_3_with_three_actual_columns-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-colspan_2_on_td_with_html_colspan_not_specified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/cell_aria-rowspan_2_on_div-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-rowspan_2_on_div-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/cell_aria-rowspan_2_on_div-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-rowspan_2_on_div-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-rowspan_2_on_td_html_rowspan_3-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-rowspan_2_on_td_html_rowspan_3_with_three_actual_rows-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/cell_aria-rowspan_2_on_td_with_html_rowspan_not_specified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/cell_colindex_4-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/cell_colindex_4-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/cell_colindex_4-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/cell_colindex_4-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/cell_rowindex_4-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/cell_rowindex_4-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/cell_rowindex_4-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/cell_rowindex_4-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/checkbox_readonly_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/checkbox_readonly_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/checkbox_readonly_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/checkbox_readonly_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/checkbox_readonly_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/checkbox_readonly_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/checkbox_readonly_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/checkbox_readonly_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/checkbox_readonly_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/checkbox_readonly_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/checkbox_readonly_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/checkbox_readonly_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/columnheader_aria-colspan_2_on_div-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-colspan_2_on_div-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/columnheader_aria-colspan_2_on_div-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-colspan_2_on_div-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_html_colspan_3-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_html_colspan_3_with_three_actual_columns-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-colspan_2_on_th_with_html_colspan_not_specified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/columnheader_aria-rowspan_2_on_div-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-rowspan_2_on_div-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/columnheader_aria-rowspan_2_on_div-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-rowspan_2_on_div-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_html_rowspan_3-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_html_rowspan_3_with_three_actual_rows-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/columnheader_aria-rowspan_2_on_th_with_html_rowspan_not_specified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/columnheader_colindex_4-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/columnheader_colindex_4-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/columnheader_colindex_4-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/columnheader_colindex_4-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/columnheader_rowindex_4-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/columnheader_rowindex_4-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/columnheader_rowindex_4-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/columnheader_rowindex_4-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/columnheader_selected_false_not_automatically_propagated-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/columnheader_selected_false_not_automatically_propagated-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/columnheader_selected_false_not_automatically_propagated-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/columnheader_selected_false_not_automatically_propagated-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/columnheader_selected_true_not_automatically_propagated-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/columnheader_selected_true_not_automatically_propagated-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/columnheader_selected_true_not_automatically_propagated-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/columnheader_selected_true_not_automatically_propagated-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_controls_an_invalid_id-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_controls_an_invalid_id-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_controls_an_invalid_id-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_controls_an_invalid_id-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_dialog-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_dialog-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_dialog-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_dialog-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_grid-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_grid-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_grid-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_grid-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_listbox-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_listbox-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_listbox-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_listbox-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_menu-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_menu-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_menu-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_menu-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_tree-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_tree-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_tree-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_tree-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_haspopup_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_haspopup_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_orientation_horizontal-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_orientation_horizontal-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_orientation_horizontal-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_orientation_horizontal-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_orientation_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_orientation_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_orientation_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_orientation_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_orientation_vertical-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_orientation_vertical-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_orientation_vertical-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_orientation_vertical-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_readonly_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_readonly_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_readonly_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_readonly_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_readonly_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_readonly_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_readonly_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_readonly_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/combobox_readonly_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/combobox_readonly_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/combobox_readonly_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/combobox_readonly_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/dialog_modal_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/dialog_modal_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/dialog_modal_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/dialog_modal_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/dialog_modal_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/dialog_modal_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/dialog_modal_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/dialog_modal_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/dialog_modal_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/dialog_modal_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/dialog_modal_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/dialog_modal_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/div_element_without_role_roledescription_valid-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/div_element_without_role_roledescription_valid-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/div_element_without_role_roledescription_valid-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/div_element_without_role_roledescription_valid-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/errormessage_object_in_invalid_state-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/errormessage_object_in_invalid_state-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/errormessage_object_in_invalid_state-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/errormessage_object_in_invalid_state-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/errormessage_object_in_valid_state-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/errormessage_object_in_valid_state-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/errormessage_object_in_valid_state-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/errormessage_object_in_valid_state-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/feed-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/feed-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/feed-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/feed-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/figure-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/figure-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/figure-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/figure-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_aria-readonly_false_automatically_propagated-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_aria-readonly_false_automatically_propagated-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_aria-readonly_false_automatically_propagated-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_aria-readonly_false_automatically_propagated-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_aria-readonly_true_automatically_propagated-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_aria-readonly_true_automatically_propagated-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_aria-readonly_true_automatically_propagated-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_aria-readonly_true_automatically_propagated-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_busy_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_busy_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_busy_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_busy_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_busy_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_busy_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_busy_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_busy_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_busy_value_changes-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_busy_value_changes-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_busy_value_changes-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_busy_value_changes-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_colcount_8-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_colcount_8-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_colcount_8-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_colcount_8-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_columnheader_readonly_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_columnheader_readonly_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_columnheader_readonly_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_columnheader_readonly_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_columnheader_readonly_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_columnheader_readonly_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_columnheader_readonly_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_columnheader_readonly_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_columnheader_readonly_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_columnheader_readonly_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_columnheader_readonly_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_columnheader_readonly_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_columnheader_required_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_columnheader_required_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_columnheader_required_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_columnheader_required_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_columnheader_required_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_columnheader_required_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_columnheader_required_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_columnheader_required_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_columnheader_required_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_columnheader_required_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_columnheader_required_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_columnheader_required_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_rowcount_3-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_rowcount_3-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_rowcount_3-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_rowcount_3-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_rowheader_readonly_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_rowheader_readonly_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_rowheader_readonly_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_rowheader_readonly_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_rowheader_readonly_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_rowheader_readonly_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_rowheader_readonly_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_rowheader_readonly_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_rowheader_readonly_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_rowheader_readonly_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_rowheader_readonly_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_rowheader_readonly_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_rowheader_required_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_rowheader_required_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_rowheader_required_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_rowheader_required_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_rowheader_required_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_rowheader_required_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_rowheader_required_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_rowheader_required_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/grid_rowheader_required_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/grid_rowheader_required_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/grid_rowheader_required_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/grid_rowheader_required_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/gridcell_aria-colspan_2_on_div-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/gridcell_aria-colspan_2_on_div-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/gridcell_aria-colspan_2_on_div-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/gridcell_aria-colspan_2_on_div-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/gridcell_aria-rowspan_2_on_div-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/gridcell_aria-rowspan_2_on_div-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/gridcell_aria-rowspan_2_on_div-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/gridcell_aria-rowspan_2_on_div-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/gridcell_colindex_4-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/gridcell_colindex_4-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/gridcell_colindex_4-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/gridcell_colindex_4-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/gridcell_rowindex_4-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/gridcell_rowindex_4-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/gridcell_rowindex_4-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/gridcell_rowindex_4-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/group_hidden_undefined_element_not_rendered-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/group_hidden_undefined_element_not_rendered-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/group_hidden_undefined_element_not_rendered-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/group_hidden_undefined_element_not_rendered-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/group_hidden_undefined_element_rendered-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/group_hidden_undefined_element_rendered-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/group_hidden_undefined_element_rendered-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/group_hidden_undefined_element_rendered-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/heading_level_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/heading_level_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/heading_level_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/heading_level_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/keyshortcuts_multiple_shortcuts-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/keyshortcuts_multiple_shortcuts-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/keyshortcuts_multiple_shortcuts-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/keyshortcuts_multiple_shortcuts-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/keyshortcuts_one_shortcut-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/keyshortcuts_one_shortcut-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/keyshortcuts_one_shortcut-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/keyshortcuts_one_shortcut-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/listbox_busy_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/listbox_busy_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/listbox_busy_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/listbox_busy_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/listbox_busy_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/listbox_busy_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/listbox_busy_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/listbox_busy_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/listbox_orientation_horizontal-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/listbox_orientation_horizontal-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/listbox_orientation_horizontal-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/listbox_orientation_horizontal-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/listbox_orientation_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/listbox_orientation_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/listbox_orientation_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/listbox_orientation_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/listbox_orientation_vertical-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/listbox_orientation_vertical-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/listbox_orientation_vertical-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/listbox_orientation_vertical-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/listbox_readonly_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/listbox_readonly_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/listbox_readonly_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/listbox_readonly_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/listbox_readonly_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/listbox_readonly_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/listbox_readonly_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/listbox_readonly_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/listbox_readonly_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/listbox_readonly_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/listbox_readonly_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/listbox_readonly_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/listitem_setsize_-1-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/listitem_setsize_-1-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/listitem_setsize_-1-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/listitem_setsize_-1-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menu_orientation_horizontal-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menu_orientation_horizontal-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menu_orientation_horizontal-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menu_orientation_horizontal-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menu_orientation_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menu_orientation_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menu_orientation_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menu_orientation_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menu_orientation_vertical-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menu_orientation_vertical-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menu_orientation_vertical-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menu_orientation_vertical-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menubar_busy_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menubar_busy_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menubar_busy_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menubar_busy_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menubar_busy_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menubar_busy_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menubar_busy_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menubar_busy_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menubar_orientation_horizontal-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menubar_orientation_horizontal-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menubar_orientation_horizontal-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menubar_orientation_horizontal-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menubar_orientation_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menubar_orientation_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menubar_orientation_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menubar_orientation_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menubar_orientation_vertical-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menubar_orientation_vertical-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menubar_orientation_vertical-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menubar_orientation_vertical-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitem_expanded_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitem_expanded_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitem_expanded_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitem_expanded_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitem_expanded_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitem_expanded_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitem_expanded_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitem_expanded_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitem_posinset_and_setsize-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitem_posinset_and_setsize-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitem_posinset_and_setsize-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitem_posinset_and_setsize-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_expanded_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitemcheckbox_expanded_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_expanded_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitemcheckbox_expanded_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_expanded_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitemcheckbox_expanded_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_expanded_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitemcheckbox_expanded_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_posinset_and_setsize-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitemcheckbox_posinset_and_setsize-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_posinset_and_setsize-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitemcheckbox_posinset_and_setsize-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_readonly_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitemcheckbox_readonly_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_readonly_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitemcheckbox_readonly_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_readonly_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitemcheckbox_readonly_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_readonly_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitemcheckbox_readonly_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_readonly_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitemcheckbox_readonly_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitemcheckbox_readonly_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitemcheckbox_readonly_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitemradio_expanded_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitemradio_expanded_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitemradio_expanded_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitemradio_expanded_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitemradio_expanded_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitemradio_expanded_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitemradio_expanded_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitemradio_expanded_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitemradio_posinset_and_setsize-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitemradio_posinset_and_setsize-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitemradio_posinset_and_setsize-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitemradio_posinset_and_setsize-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitemradio_readonly_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitemradio_readonly_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitemradio_readonly_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitemradio_readonly_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitemradio_readonly_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitemradio_readonly_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitemradio_readonly_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitemradio_readonly_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/menuitemradio_readonly_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/menuitemradio_readonly_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/menuitemradio_readonly_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/menuitemradio_readonly_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/none-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/none-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/none-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/none-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/option_selected_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/option_selected_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/option_selected_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/option_selected_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/option_selected_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/option_selected_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/option_selected_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/option_selected_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/option_selected_undefined-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/option_selected_undefined-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/option_selected_undefined-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/option_selected_undefined-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/option_selected_value_changes-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/option_selected_value_changes-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/option_selected_value_changes-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/option_selected_value_changes-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/radiogroup_orientation_horizontal-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/radiogroup_orientation_horizontal-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/radiogroup_orientation_horizontal-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/radiogroup_orientation_horizontal-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/radiogroup_orientation_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/radiogroup_orientation_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/radiogroup_orientation_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/radiogroup_orientation_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/radiogroup_orientation_vertical-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/radiogroup_orientation_vertical-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/radiogroup_orientation_vertical-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/radiogroup_orientation_vertical-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/radiogroup_readonly_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/radiogroup_readonly_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/radiogroup_readonly_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/radiogroup_readonly_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/radiogroup_readonly_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/radiogroup_readonly_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/radiogroup_readonly_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/radiogroup_readonly_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/radiogroup_readonly_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/radiogroup_readonly_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/radiogroup_readonly_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/radiogroup_readonly_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/region_with_name-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/region_with_name-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/region_with_name-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/region_with_name-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/region_without_name-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/region_without_name-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/region_without_name-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/region_without_name-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/row_colindex_4-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/row_colindex_4-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/row_colindex_4-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/row_colindex_4-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/row_rowindex_4-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/row_rowindex_4-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/row_rowindex_4-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/row_rowindex_4-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/rowheader_aria-colspan_2_on_div-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/rowheader_aria-colspan_2_on_div-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/rowheader_aria-colspan_2_on_div-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/rowheader_aria-colspan_2_on_div-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/rowheader_aria-rowspan_2_on_div-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/rowheader_aria-rowspan_2_on_div-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/rowheader_aria-rowspan_2_on_div-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/rowheader_aria-rowspan_2_on_div-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/rowheader_colindex_4-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/rowheader_colindex_4-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/rowheader_colindex_4-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/rowheader_colindex_4-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/rowheader_rowindex_4-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/rowheader_rowindex_4-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/rowheader_rowindex_4-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/rowheader_rowindex_4-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/rowheader_selected_false_not_automatically_propagated-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/rowheader_selected_false_not_automatically_propagated-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/rowheader_selected_false_not_automatically_propagated-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/rowheader_selected_false_not_automatically_propagated-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/rowheader_selected_true_not_automatically_propagated-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/rowheader_selected_true_not_automatically_propagated-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/rowheader_selected_true_not_automatically_propagated-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/rowheader_selected_true_not_automatically_propagated-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/scrollbar_all_values_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/scrollbar_all_values_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/scrollbar_all_values_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/scrollbar_all_values_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/scrollbar_only_valuenow_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/scrollbar_only_valuenow_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/scrollbar_only_valuenow_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/scrollbar_only_valuenow_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/scrollbar_orientation_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/scrollbar_orientation_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/scrollbar_orientation_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/scrollbar_orientation_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_activedescendant-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_activedescendant-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_activedescendant-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_activedescendant-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_activedescendant_value_changes-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_activedescendant_value_changes-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_activedescendant_value_changes-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_activedescendant_value_changes-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_both-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_autocomplete_both-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_both-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_autocomplete_both-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_inline-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_autocomplete_inline-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_inline-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_autocomplete_inline-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_list-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_autocomplete_list-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_list-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_autocomplete_list-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_none-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_autocomplete_none-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_none-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_autocomplete_none-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_autocomplete_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_autocomplete_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_autocomplete_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_multiline_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_multiline_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_multiline_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_multiline_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_multiline_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_multiline_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_multiline_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_multiline_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_multiline_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_multiline_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_multiline_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_multiline_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_placeholder-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_placeholder-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_placeholder-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_placeholder-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_readonly_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_readonly_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_readonly_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_readonly_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_readonly_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_readonly_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_readonly_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_readonly_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_readonly_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_readonly_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_readonly_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_readonly_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_required_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_required_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_required_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_required_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_required_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_required_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_required_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_required_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/searchbox_required_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/searchbox_required_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/searchbox_required_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/searchbox_required_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/separator_focusable_all_values_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/separator_focusable_all_values_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/separator_focusable_all_values_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/separator_focusable_all_values_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/separator_focusable_only_valuenow_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/separator_focusable_only_valuenow_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/separator_focusable_only_valuenow_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/separator_focusable_only_valuenow_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/separator_focusable_valuetext-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/separator_focusable_valuetext-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/separator_focusable_valuetext-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/separator_focusable_valuetext-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/separator_orientation_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/separator_orientation_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/separator_orientation_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/separator_orientation_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/separator_unfocusable_all_values_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/separator_unfocusable_all_values_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/separator_unfocusable_all_values_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/separator_unfocusable_all_values_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/separator_unfocusable_valuetext-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/separator_unfocusable_valuetext-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/separator_unfocusable_valuetext-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/separator_unfocusable_valuetext-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/slider_all_values_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/slider_all_values_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/slider_all_values_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/slider_all_values_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/slider_only_valuenow_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/slider_only_valuenow_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/slider_only_valuenow_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/slider_only_valuenow_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/slider_orientation_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/slider_orientation_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/slider_orientation_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/slider_orientation_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/slider_readonly_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/slider_readonly_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/slider_readonly_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/slider_readonly_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/slider_readonly_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/slider_readonly_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/slider_readonly_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/slider_readonly_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/slider_readonly_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/slider_readonly_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/slider_readonly_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/slider_readonly_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/spinbutton_all_values_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/spinbutton_all_values_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/spinbutton_all_values_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/spinbutton_all_values_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/spinbutton_only_aria-valuenow_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/spinbutton_only_aria-valuenow_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/spinbutton_only_aria-valuenow_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/spinbutton_only_aria-valuenow_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/spinbutton_readonly_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/spinbutton_readonly_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/spinbutton_readonly_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/spinbutton_readonly_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/spinbutton_readonly_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/spinbutton_readonly_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/spinbutton_readonly_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/spinbutton_readonly_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/spinbutton_readonly_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/spinbutton_readonly_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/spinbutton_readonly_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/spinbutton_readonly_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/switch_checked_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/switch_checked_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/switch_checked_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/switch_checked_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/switch_checked_mixed-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/switch_checked_mixed-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/switch_checked_mixed-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/switch_checked_mixed-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/switch_checked_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/switch_checked_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/switch_checked_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/switch_checked_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/switch_checked_undefined-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/switch_checked_undefined-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/switch_checked_undefined-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/switch_checked_undefined-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/switch_checked_value_changes-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/switch_checked_value_changes-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/switch_checked_value_changes-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/switch_checked_value_changes-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/switch_readonly_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/switch_readonly_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/switch_readonly_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/switch_readonly_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/switch_readonly_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/switch_readonly_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/switch_readonly_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/switch_readonly_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/switch_readonly_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/switch_readonly_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/switch_readonly_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/switch_readonly_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/tab_posinset_and_setsize-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/tab_posinset_and_setsize-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/tab_posinset_and_setsize-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/tab_posinset_and_setsize-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/table_colcount_-1-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/table_colcount_-1-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/table_colcount_-1-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/table_colcount_-1-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/table_colcount_8-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/table_colcount_8-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/table_colcount_8-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/table_colcount_8-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/table_rowcount_-1-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/table_rowcount_-1-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/table_rowcount_-1-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/table_rowcount_-1-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/table_rowcount_3-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/table_rowcount_3-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/table_rowcount_3-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/table_rowcount_3-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/tablist_orientation_horizontal-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/tablist_orientation_horizontal-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/tablist_orientation_horizontal-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/tablist_orientation_horizontal-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/tablist_orientation_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/tablist_orientation_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/tablist_orientation_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/tablist_orientation_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/tablist_orientation_vertical-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/tablist_orientation_vertical-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/tablist_orientation_vertical-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/tablist_orientation_vertical-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/term_role-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/term_role-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/term_role-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/term_role-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/textbox_placeholder-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/textbox_placeholder-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/textbox_placeholder-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/textbox_placeholder-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/toolbar_orientation_horizontal-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/toolbar_orientation_horizontal-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/toolbar_orientation_horizontal-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/toolbar_orientation_horizontal-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/toolbar_orientation_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/toolbar_orientation_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/toolbar_orientation_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/toolbar_orientation_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/toolbar_orientation_vertical-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/toolbar_orientation_vertical-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/toolbar_orientation_vertical-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/toolbar_orientation_vertical-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/tree_orientation_horizontal-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/tree_orientation_horizontal-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/tree_orientation_horizontal-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/tree_orientation_horizontal-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/tree_orientation_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/tree_orientation_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/tree_orientation_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/tree_orientation_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/tree_orientation_vertical-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/tree_orientation_vertical-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/tree_orientation_vertical-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/tree_orientation_vertical-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/treegrid_colcount_8-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/treegrid_colcount_8-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/treegrid_colcount_8-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/treegrid_colcount_8-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/treegrid_orientation_horizontal-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/treegrid_orientation_horizontal-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/treegrid_orientation_horizontal-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/treegrid_orientation_horizontal-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/treegrid_orientation_unspecified-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/treegrid_orientation_unspecified-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/treegrid_orientation_unspecified-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/treegrid_orientation_unspecified-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/treegrid_orientation_vertical-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/treegrid_orientation_vertical-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/treegrid_orientation_vertical-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/treegrid_orientation_vertical-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/treegrid_rowcount_3-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/treegrid_rowcount_3-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/treegrid_rowcount_3-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/treegrid_rowcount_3-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/treeitem_selected_false-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/treeitem_selected_false-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/treeitem_selected_false-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/treeitem_selected_false-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/treeitem_selected_true-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/treeitem_selected_true-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/treeitem_selected_true-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/treeitem_selected_true-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/treeitem_selected_undefined-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/treeitem_selected_undefined-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/treeitem_selected_undefined-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/treeitem_selected_undefined-manual.html diff --git a/tests/wpt/web-platform-tests/wai-aria/treeitem_selected_value_changes-manual.html b/tests/wpt/web-platform-tests/wai-aria/manual/treeitem_selected_value_changes-manual.html similarity index 100% rename from tests/wpt/web-platform-tests/wai-aria/treeitem_selected_value_changes-manual.html rename to tests/wpt/web-platform-tests/wai-aria/manual/treeitem_selected_value_changes-manual.html diff --git a/tests/wpt/web-platform-tests/webauthn/getcredential-prf.https.html b/tests/wpt/web-platform-tests/webauthn/getcredential-prf.https.html index 61b52ac5958..40dfc5cad33 100644 --- a/tests/wpt/web-platform-tests/webauthn/getcredential-prf.https.html +++ b/tests/wpt/web-platform-tests/webauthn/getcredential-prf.https.html @@ -116,13 +116,21 @@ standardSetup(async function(authenticator) { byCred["Zm9v"] = { first: new Uint8Array([1,2,3,4]).buffer, }; - const assertion = await assert(id, { + return promise_rejects_dom(t, "SyntaxError", assert(id, { evalByCredential: byCred, - }); - assert_own_property(assertion.getClientExtensionResults(), 'prf'); - assert_not_own_property(assertion.getClientExtensionResults().prf, - 'results'); - }, "navigator.credentials.get() using wrong credential ID"); + })); + }, "navigator.credentials.get() with credential ID not in allowedCredentials"); + + promise_test(async t => { + const id = (await credential).rawId; + const byCred = {}; + byCred["Zm9v"] = { + first: new Uint8Array([1,2,3,4]), + }; + return promise_rejects_dom(t, "SyntaxError", assert(id, { + evalByCredential: byCred, + })); + }, "navigator.credentials.get() with Uint8Array credential ID not in allowedCredentials"); promise_test(async t => { const id = (await credential).rawId; diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/__init__.py new file mode 100644 index 00000000000..d34fef9869a --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/__init__.py @@ -0,0 +1,6 @@ +import pytest + + +def assert_pdf(data): + assert data.startswith(b"%PDF-"), "Decoded data starts with the PDF signature" + assert data.endswith(b"%%EOF\n"), "Decoded data ends with the EOF flag" diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/context.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/context.py new file mode 100644 index 00000000000..a73bfee9621 --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/context.py @@ -0,0 +1,26 @@ +from base64 import decodebytes + +import pytest + +from . import assert_pdf +from ... import recursive_compare + +pytestmark = pytest.mark.asyncio + + +async def test_context(bidi_session, top_context, inline, get_pdf_content): + text = "Test" + url = inline(text) + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + value = await bidi_session.browsing_context.print(context=top_context["context"]) + pdf = decodebytes(value.encode()) + + assert_pdf(pdf) + + pdf_content = await get_pdf_content(value) + recursive_compare( + {"type": "array", "value": [{"type": "string", "value": text}]}, pdf_content + ) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/invalid.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/invalid.py new file mode 100644 index 00000000000..114aeb62dcc --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/invalid.py @@ -0,0 +1,197 @@ +import pytest +import webdriver.bidi.error as error + +pytestmark = pytest.mark.asyncio + + +@pytest.mark.parametrize("context", [None, False, 42, {}, []]) +async def test_params_context_invalid_type(bidi_session, context): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.print(context=context) + + +async def test_params_context_invalid_value(bidi_session): + with pytest.raises(error.NoSuchFrameException): + await bidi_session.browsing_context.print(context="_invalid_") + + +async def test_params_context_closed(bidi_session): + new_tab = await bidi_session.browsing_context.create(type_hint="tab") + await bidi_session.browsing_context.close(context=new_tab["context"]) + + # Try to print the closed context + with pytest.raises(error.NoSuchFrameException): + await bidi_session.browsing_context.print(context=new_tab["context"]) + + +@pytest.mark.parametrize("background", ["foo", 42, {}, []]) +async def test_params_background_invalid_type(bidi_session, top_context, background): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.print( + context=top_context["context"], background=background + ) + + +@pytest.mark.parametrize( + "margin", + [ + False, + "foo", + 42, + [], + {"top": False}, + {"top": "foo"}, + {"top": []}, + {"top": {}}, + {"bottom": False}, + {"bottom": "foo"}, + {"bottom": []}, + {"bottom": {}}, + {"left": False}, + {"left": "foo"}, + {"left": []}, + {"left": {}}, + {"right": False}, + {"right": "foo"}, + {"right": []}, + {"right": {}}, + ], +) +async def test_params_margin_invalid_type(bidi_session, top_context, margin): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.print( + context=top_context["context"], margin=margin + ) + + +@pytest.mark.parametrize( + "margin", + [ + {"top": -0.1}, + {"bottom": -0.1}, + {"left": -0.1}, + {"right": -0.1}, + ], +) +async def test_params_margin_invalid_value(bidi_session, top_context, margin): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.print( + context=top_context["context"], margin=margin + ) + + +@pytest.mark.parametrize("orientation", [False, 42, {}, []]) +async def test_params_orientation_invalid_type(bidi_session, top_context, orientation): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.print( + context=top_context["context"], orientation=orientation + ) + + +async def test_params_orientation_invalid_value(bidi_session, top_context): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.print( + context=top_context["context"], orientation="foo" + ) + + +@pytest.mark.parametrize( + "page", + [ + False, + "foo", + 42, + [], + {"height": False}, + {"height": "foo"}, + {"height": []}, + {"height": {}}, + {"width": False}, + {"width": "foo"}, + {"width": []}, + {"width": {}}, + ], +) +async def test_params_page_invalid_type(bidi_session, top_context, page): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.print( + context=top_context["context"], page=page + ) + + +@pytest.mark.parametrize( + "page", + [ + {"height": -1}, + {"width": -1}, + ], +) +async def test_params_page_invalid_value(bidi_session, top_context, page): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.print( + context=top_context["context"], page=page + ) + + +@pytest.mark.parametrize( + "page_ranges", + [ + False, + "foo", + 42, + {}, + [None], + [False], + [[]], + [{}], + ["1-2", {}], + ], +) +async def test_params_page_ranges_invalid_type(bidi_session, top_context, page_ranges): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.print( + context=top_context["context"], page_ranges=page_ranges + ) + +@pytest.mark.parametrize( + "page_ranges", + [ + [4.2], + ["4.2"], + ["3-2"], + ["a-2"], + ["1:2"], + ["1-2-3"], + ], +) +async def test_params_page_ranges_invalid_value(bidi_session, top_context, page_ranges): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.print( + context=top_context["context"], page_ranges=page_ranges + ) + + +@pytest.mark.parametrize("scale", [False, "foo", {}, []]) +async def test_params_scale_invalid_type(bidi_session, top_context, scale): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.print( + context=top_context["context"], scale=scale + ) + + +@pytest.mark.parametrize("scale", [-1, 0.09, 2.01, 42]) +async def test_params_scale_invalid_value(bidi_session, top_context, scale): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.print( + context=top_context["context"], scale=scale + ) + + +@pytest.mark.parametrize("shrink_to_fit", ["foo", 42, {}, []]) +async def test_params_shrink_to_fit_invalid_type( + bidi_session, top_context, shrink_to_fit +): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.browsing_context.print( + context=top_context["context"], shrink_to_fit=shrink_to_fit + ) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/page_ranges.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/page_ranges.py new file mode 100644 index 00000000000..9e466883b0a --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/browsing_context/print/page_ranges.py @@ -0,0 +1,140 @@ +# META: timeout=long +from base64 import decodebytes + +import pytest + +from . import assert_pdf +from ... import recursive_compare + +pytestmark = pytest.mark.asyncio + + +@pytest.mark.parametrize( + "ranges,expected", + [ + ( + ["2-4"], + [ + {"type": "string", "value": "Page 2"}, + {"type": "string", "value": "Page 3"}, + {"type": "string", "value": "Page 4"}, + ], + ), + ( + ["2-4", "2-3"], + [ + {"type": "string", "value": "Page 2"}, + {"type": "string", "value": "Page 3"}, + {"type": "string", "value": "Page 4"}, + ], + ), + ( + ["2-4", "3-5"], + [ + {"type": "string", "value": "Page 2"}, + {"type": "string", "value": "Page 3"}, + {"type": "string", "value": "Page 4"}, + {"type": "string", "value": "Page 5"}, + ], + ), + ( + ["9-"], + [ + {"type": "string", "value": "Page 9"}, + {"type": "string", "value": "Page 10"}, + ], + ), + ( + ["-2"], + [ + {"type": "string", "value": "Page 1"}, + {"type": "string", "value": "Page 2"}, + ], + ), + ( + [7], + [ + {"type": "string", "value": "Page 7"}, + ], + ), + ( + ["7"], + [ + {"type": "string", "value": "Page 7"}, + ], + ), + ( + ["-2", "9-", "7"], + [ + {"type": "string", "value": "Page 1"}, + {"type": "string", "value": "Page 2"}, + {"type": "string", "value": "Page 7"}, + {"type": "string", "value": "Page 9"}, + {"type": "string", "value": "Page 10"}, + ], + ), + ( + ["-5", "2-"], + [ + {"type": "string", "value": "Page 1"}, + {"type": "string", "value": "Page 2"}, + {"type": "string", "value": "Page 3"}, + {"type": "string", "value": "Page 4"}, + {"type": "string", "value": "Page 5"}, + {"type": "string", "value": "Page 6"}, + {"type": "string", "value": "Page 7"}, + {"type": "string", "value": "Page 8"}, + {"type": "string", "value": "Page 9"}, + {"type": "string", "value": "Page 10"}, + ], + ), + ( + [], + [ + {"type": "string", "value": "Page 1"}, + {"type": "string", "value": "Page 2"}, + {"type": "string", "value": "Page 3"}, + {"type": "string", "value": "Page 4"}, + {"type": "string", "value": "Page 5"}, + {"type": "string", "value": "Page 6"}, + {"type": "string", "value": "Page 7"}, + {"type": "string", "value": "Page 8"}, + {"type": "string", "value": "Page 9"}, + {"type": "string", "value": "Page 10"}, + ], + ), + ], +) +async def test_page_ranges_document( + bidi_session, inline, top_context, get_pdf_content, ranges, expected +): + url = inline( + """ + + +
    Page 1
    +
    Page 2
    +
    Page 3
    +
    Page 4
    +
    Page 5
    +
    Page 6
    +
    Page 7
    +
    Page 8
    +
    Page 9
    +
    Page 10
    """ + ) + await bidi_session.browsing_context.navigate( + context=top_context["context"], url=url, wait="complete" + ) + + value = await bidi_session.browsing_context.print( + context=top_context["context"], page_ranges=ranges + ) + pdf = decodebytes(value.encode()) + + assert_pdf(pdf) + + pdf_content = await get_pdf_content(value) + recursive_compare({"type": "array", "value": expected}, pdf_content) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/arguments.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/arguments.py index 9fbe5fb8110..daf31fc869c 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/arguments.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/arguments.py @@ -1,37 +1,14 @@ import pytest +import webdriver.bidi.error as error from webdriver.bidi.modules.script import ContextTarget -from ... import recursive_compare - - -@pytest.mark.asyncio -async def test_arguments(bidi_session, top_context): - result = await bidi_session.script.call_function( - function_declaration="(...args)=>{return args}", - arguments=[{ - "type": "string", - "value": "ARGUMENT_STRING_VALUE" - }, { - "type": "number", - "value": 42}], - await_promise=False, - target=ContextTarget(top_context["context"])) - - recursive_compare({ - "type": "array", - "value": [{ - "type": 'string', - "value": 'ARGUMENT_STRING_VALUE' - }, { - "type": 'number', - "value": 42}]}, - result) +from ... import any_string, recursive_compare @pytest.mark.asyncio async def test_default_arguments(bidi_session, top_context): result = await bidi_session.script.call_function( - function_declaration="(...args)=>{return args}", + function_declaration="(...args) => args", await_promise=False, target=ContextTarget(top_context["context"])) @@ -41,6 +18,121 @@ async def test_default_arguments(bidi_session, top_context): }, result) +@pytest.mark.asyncio +@pytest.mark.parametrize( + "argument, expected", + [ + ({"type": "undefined"}, "undefined"), + ({"type": "null"}, "null"), + ({"type": "string", "value": "foobar"}, "'foobar'"), + ({"type": "string", "value": "2"}, "'2'"), + ({"type": "number", "value": "-0"}, "-0"), + ({"type": "number", "value": "Infinity"}, "Infinity"), + ({"type": "number", "value": "-Infinity"}, "-Infinity"), + ({"type": "number", "value": 3}, "3"), + ({"type": "number", "value": 1.4}, "1.4"), + ({"type": "boolean", "value": True}, "true"), + ({"type": "boolean", "value": False}, "false"), + ({"type": "bigint", "value": "42"}, "42n"), + ], +) +async def test_primitive_value(bidi_session, top_context, argument, expected): + result = await bidi_session.script.call_function( + function_declaration=f"""(arg) => {{ + if (arg !== {expected}) {{ + throw new Error(`Argument should be {expected}, but was ` + arg); + }} + return arg; + }}""", + arguments=[argument], + await_promise=False, + target=ContextTarget(top_context["context"]), + ) + + recursive_compare(argument, result) + + +@pytest.mark.asyncio +async def test_primitive_value_NaN(bidi_session, top_context): + nan_remote_value = {"type": "number", "value": "NaN"} + result = await bidi_session.script.call_function( + function_declaration="""(arg) => { + if (!isNaN(arg)) { + throw new Error("Argument should be 'NaN', but was " + arg); + } + return arg; + }""", + arguments=[nan_remote_value], + await_promise=False, + target=ContextTarget(top_context["context"]), + ) + + recursive_compare(nan_remote_value, result) + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "argument, expected_type", + [ + ({ + "type": "array", + "value": [ + {"type": "string", "value": "foobar"}, + ], + }, + "Array" + ), + ({"type": "date", "value": "2022-05-31T13:47:29.000Z"}, + "Date" + ), + ({ + "type": "map", + "value": [ + ["foobar", {"type": "string", "value": "foobar"}], + ], + }, + "Map" + ), + ({ + "type": "object", + "value": [ + ["foobar", {"type": "string", "value": "foobar"}], + ], + }, + "Object" + ), + ({"type": "regexp", "value": {"pattern": "foo", "flags": "g"}}, + "RegExp" + ), + ({ + "type": "set", + "value": [ + {"type": "string", "value": "foobar"}, + ], + }, + "Set" + ) + ], +) +async def test_local_value(bidi_session, top_context, argument, expected_type): + result = await bidi_session.script.call_function( + function_declaration=f"""(arg) => {{ + if (!(arg instanceof {expected_type})) {{ + const type = Object.prototype.toString.call(arg); + throw new Error( + "Argument type should be {expected_type}, but was " + type + ); + }} + return arg; + }}""", + arguments=[argument], + await_promise=False, + target=ContextTarget(top_context["context"]), + ) + + recursive_compare(argument, result) + + @pytest.mark.asyncio @pytest.mark.parametrize( "setup_expression, function_declaration, expected", @@ -112,11 +204,6 @@ async def test_default_arguments(bidi_session, top_context): "(func) => func()", {"type": "boolean", "value": False}, ), - ( - "document.createElement('div')", - "(node) => node.tagName", - {"type": "string", "value": "DIV"}, - ), ( "window.foo = 3; window", "(window) => window.foo", @@ -134,7 +221,7 @@ async def test_default_arguments(bidi_session, top_context): ), ], ) -async def test_remote_value_argument( +async def test_remote_reference_argument( bidi_session, top_context, setup_expression, function_declaration, expected ): remote_value_result = await bidi_session.script.evaluate( @@ -157,116 +244,6 @@ async def test_remote_value_argument( assert result == expected -@pytest.mark.asyncio -@pytest.mark.parametrize( - "argument, expected", - [ - ({"type": "undefined"}, "undefined"), - ({"type": "null"}, "null"), - ({"type": "string", "value": "foobar"}, "'foobar'"), - ({"type": "string", "value": "2"}, "'2'"), - ({"type": "number", "value": "-0"}, "-0"), - ({"type": "number", "value": "Infinity"}, "Infinity"), - ({"type": "number", "value": "-Infinity"}, "-Infinity"), - ({"type": "number", "value": 3}, "3"), - ({"type": "number", "value": 1.4}, "1.4"), - ({"type": "boolean", "value": True}, "true"), - ({"type": "boolean", "value": False}, "false"), - ({"type": "bigint", "value": "42"}, "42n"), - ], -) -async def test_primitive_values(bidi_session, top_context, argument, expected): - result = await bidi_session.script.call_function( - function_declaration=f"""(arg) => {{ - if(arg!=={expected}) - throw Error("Argument should be {expected}, but was "+arg); - return arg; - }}""", - arguments=[argument], - await_promise=False, - target=ContextTarget(top_context["context"]), - ) - - recursive_compare(argument, result) - - -@pytest.mark.asyncio -async def test_nan(bidi_session, top_context): - nan_remote_value = {"type": "number", "value": "NaN"} - result = await bidi_session.script.call_function( - function_declaration=f"""(arg) => {{ - if(!isNaN(arg)) - throw Error("Argument should be 'NaN', but was "+arg); - return arg; - }}""", - arguments=[nan_remote_value], - await_promise=False, - target=ContextTarget(top_context["context"]), - ) - - recursive_compare(nan_remote_value, result) - - -@pytest.mark.asyncio -@pytest.mark.parametrize( - "argument, expected_type", - [ - ({ - "type": "array", - "value": [ - {"type": "string", "value": "foobar"}, - ], - }, - "Array" - ), - ({"type": "date", "value": "2022-05-31T13:47:29.000Z"}, - "Date" - ), - ({ - "type": "map", - "value": [ - ["foobar", {"type": "string", "value": "foobar"}], - ], - }, - "Map" - ), - ({ - "type": "object", - "value": [ - ["foobar", {"type": "string", "value": "foobar"}], - ], - }, - "Object" - ), - ({"type": "regexp", "value": {"pattern": "foo", "flags": "g"}}, - "RegExp" - ), - ({ - "type": "set", - "value": [ - {"type": "string", "value": "foobar"}, - ], - }, - "Set" - ) - ], -) -async def test_local_values(bidi_session, top_context, argument, expected_type): - result = await bidi_session.script.call_function( - function_declaration=f"""(arg) => {{ - if(! (arg instanceof {expected_type})) - throw Error("Argument type should be {expected_type}, but was "+ - Object.prototype.toString.call(arg)); - return arg; - }}""", - arguments=[argument], - await_promise=False, - target=ContextTarget(top_context["context"]), - ) - - recursive_compare(argument, result) - - @pytest.mark.asyncio @pytest.mark.parametrize( "value_fn, function_declaration", @@ -293,11 +270,11 @@ async def test_local_values(bidi_session, top_context, argument, expected_type): ), ], ) -async def test_remote_value_deserialization( +async def test_remote_reference_deserialization( bidi_session, top_context, call_function, evaluate, value_fn, function_declaration ): remote_value = await evaluate( - "window.SOME_OBJECT = {SOME_PROPERTY:'SOME_VALUE'}; window.SOME_OBJECT", + "window.SOME_OBJECT = { SOME_PROPERTY: 'SOME_VALUE' }; window.SOME_OBJECT", result_ownership="root", ) @@ -315,6 +292,107 @@ async def test_remote_value_deserialization( ) +@pytest.mark.asyncio +@pytest.mark.parametrize( + "setup_expression, expected_node_type", + [ + ("document.querySelector('img')", 1), + ("document.querySelector('input#button').attributes[0]", 2), + ("document.querySelector('#with-text-node').childNodes[0]", 3), + ("""document.createProcessingInstruction("xml-stylesheet", "href='foo.css'")""", 7), + ("document.querySelector('#with-comment').childNodes[0]", 8), + ("document", 9), + ("document.doctype", 10), + ("document.createDocumentFragment()", 11), + ("document.querySelector('#custom-element').shadowRoot", 11), + ], + ids=[ + "element", + "attribute", + "text node", + "processing instruction", + "comment", + "document", + "doctype", + "document fragment", + "shadow root", + ] +) +async def test_remote_reference_node_argument( + bidi_session, get_test_page, top_context, setup_expression, expected_node_type +): + await bidi_session.browsing_context.navigate( + context=top_context['context'], url=get_test_page(), wait="complete" + ) + + remote_reference = await bidi_session.script.evaluate( + expression=setup_expression, + await_promise=False, + target=ContextTarget(top_context["context"]), + ) + + result = await bidi_session.script.call_function( + function_declaration="(node) => node.nodeType", + arguments=[remote_reference], + await_promise=False, + target=ContextTarget(top_context["context"]), + ) + + assert result == {"type": "number", "value": expected_node_type} + + +@pytest.mark.asyncio +async def test_remote_reference_node_cdata(bidi_session, inline, top_context): + xml_page = inline("""CDATA section: & ]]>.""", doctype="xml") + + await bidi_session.browsing_context.navigate( + context=top_context['context'], url=xml_page, wait="complete" + ) + + remote_reference = await bidi_session.script.evaluate( + expression="document.querySelector('foo').childNodes[1]", + await_promise=False, + target=ContextTarget(top_context["context"]), + ) + + result = await bidi_session.script.call_function( + function_declaration="(node) => node.nodeType", + arguments=[remote_reference], + await_promise=False, + target=ContextTarget(top_context["context"]), + ) + + assert result == {"type": "number", "value": 4} + + +@pytest.mark.asyncio +async def test_remote_reference_sharedId_precedence_over_handle( + bidi_session, get_test_page, top_context +): + await bidi_session.browsing_context.navigate( + context=top_context['context'], url=get_test_page(), wait="complete" + ) + + remote_reference = await bidi_session.script.evaluate( + expression="document.querySelector('img')", + await_promise=False, + result_ownership="root", + target=ContextTarget(top_context["context"]), + ) + + assert "handle" in remote_reference + # Invalidate shared reference to trigger a "no such node" error + remote_reference["sharedId"] = "foo" + + with pytest.raises(error.NoSuchNodeException): + await bidi_session.script.call_function( + function_declaration="(node) => node.nodeType", + arguments=[remote_reference], + await_promise=False, + target=ContextTarget(top_context["context"]), + ) + + @pytest.mark.asyncio @pytest.mark.parametrize( "expression, function_declaration, expected", @@ -324,6 +402,7 @@ async def test_remote_value_deserialization( "(collection) => collection.item(0)", { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, @@ -339,6 +418,7 @@ async def test_remote_value_deserialization( "(nodeList) => nodeList.item(0)", { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, @@ -354,7 +434,7 @@ async def test_remote_value_deserialization( "nodelist" ] ) -async def test_remote_value_dom_collection( +async def test_remote_reference_dom_collection( bidi_session, inline, top_context, @@ -382,4 +462,4 @@ async def test_remote_value_dom_collection( arguments=[remote_value], ) - assert result == expected + recursive_compare(expected, result) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/invalid.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/invalid.py index cf5a07f41b7..d73705c6724 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/invalid.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/invalid.py @@ -10,7 +10,7 @@ pytestmark = pytest.mark.asyncio async def test_params_target_invalid_type(bidi_session, target): with pytest.raises(error.InvalidArgumentException): await bidi_session.script.call_function( - function_declaration="1 + 2", + function_declaration="(arg) => arg", await_promise=False, target=target) @@ -19,7 +19,7 @@ async def test_params_target_invalid_type(bidi_session, target): async def test_params_context_invalid_type(bidi_session, context): with pytest.raises(error.InvalidArgumentException): await bidi_session.script.call_function( - function_declaration="1 + 2", + function_declaration="(arg) => arg", await_promise=False, target=ContextTarget(context)) @@ -28,7 +28,7 @@ async def test_params_context_invalid_type(bidi_session, context): async def test_params_sandbox_invalid_type(bidi_session, top_context, sandbox): with pytest.raises(error.InvalidArgumentException): await bidi_session.script.call_function( - function_declaration="1 + 2", + function_declaration="(arg) => arg", await_promise=False, target=ContextTarget(top_context["context"], sandbox)) @@ -37,7 +37,7 @@ async def test_params_sandbox_invalid_type(bidi_session, top_context, sandbox): async def test_params_context_unknown(bidi_session): with pytest.raises(error.NoSuchFrameException): await bidi_session.script.call_function( - function_declaration="1 + 2", + function_declaration="(arg) => arg", await_promise=False, target=ContextTarget("_UNKNOWN_")) @@ -46,7 +46,7 @@ async def test_params_context_unknown(bidi_session): async def test_params_realm_invalid_type(bidi_session, realm): with pytest.raises(error.InvalidArgumentException): await bidi_session.script.call_function( - function_declaration="1 + 2", + function_declaration="(arg) => arg", await_promise=False, target=RealmTarget(realm)) @@ -54,7 +54,7 @@ async def test_params_realm_invalid_type(bidi_session, realm): async def test_params_realm_unknown(bidi_session): with pytest.raises(error.NoSuchFrameException): await bidi_session.script.call_function( - function_declaration="1 + 2", + function_declaration="(arg) => arg", await_promise=False, target=RealmTarget("_UNKNOWN_")) @@ -74,7 +74,7 @@ async def test_params_this_invalid_type(bidi_session, top_context, this): with pytest.raises(error.InvalidArgumentException): await bidi_session.script.call_function( - function_declaration="1 + 2", + function_declaration="(arg) => arg", this=this, await_promise=False, target=ContextTarget(top_context["context"])) @@ -85,29 +85,61 @@ async def test_params_arguments_invalid_type(bidi_session, top_context, arguments): with pytest.raises(error.InvalidArgumentException): await bidi_session.script.call_function( - function_declaration="1 + 2", + function_declaration="(arg) => arg", arguments=arguments, await_promise=False, target=ContextTarget(top_context["context"])) @pytest.mark.parametrize("argument", [False, "SOME_STRING", 42, {}, []]) -async def test_params_single_argument_invalid_type(bidi_session, top_context, +async def test_params_arguments_entry_invalid_type(bidi_session, top_context, argument): with pytest.raises(error.InvalidArgumentException): await bidi_session.script.call_function( - function_declaration="1 + 2", + function_declaration="(arg) => arg", arguments=[argument], await_promise=False, target=ContextTarget(top_context["context"])) +@pytest.mark.parametrize("value", [None, False, 42, {}, []]) +async def test_params_arguments_handle_invalid_type( + bidi_session, top_context, value +): + serialized_value = { + "handle": value, + } + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.script.call_function( + function_declaration="(arg) => arg", + arguments=[serialized_value], + await_promise=False, + target=ContextTarget(top_context["context"])) + + +@pytest.mark.parametrize("value", [None, False, 42, {}, []]) +async def test_params_arguments_sharedId_invalid_type( + bidi_session, top_context, value +): + serialized_value = { + "sharedId": value, + } + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.script.call_function( + function_declaration="(arg) => arg", + arguments=[serialized_value], + await_promise=False, + target=ContextTarget(top_context["context"])) + + @pytest.mark.parametrize("await_promise", [None, "False", 0, 42, {}, []]) async def test_params_await_promise_invalid_type(bidi_session, top_context, await_promise): with pytest.raises(error.InvalidArgumentException): await bidi_session.script.call_function( - function_declaration="1 + 2", + function_declaration="(arg) => arg", await_promise=await_promise, target=ContextTarget(top_context["context"])) @@ -117,7 +149,7 @@ async def test_params_result_ownership_invalid_value(bidi_session, top_context, result_ownership): with pytest.raises(error.InvalidArgumentException): await bidi_session.script.call_function( - function_declaration="1 + 2", + function_declaration="(arg) => arg", await_promise=False, target=ContextTarget(top_context["context"]), result_ownership=result_ownership) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/result_node.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/result_node.py index 08e47be5f71..e1575374fd5 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/result_node.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/result_node.py @@ -1,18 +1,7 @@ import pytest from webdriver.bidi.modules.script import ContextTarget - -page_data = """ -


    -

    Lorem
    -
    - -
    - -""" +from ... import any_string, recursive_compare @pytest.mark.asyncio @@ -25,6 +14,7 @@ page_data = """ """, { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, @@ -41,9 +31,9 @@ page_data = """ """, { "type": "node", + "sharedId": any_string, "value": { "attributes": { - "id": "foo", "svg:foo": "bar", }, "childNodeCount": 0, @@ -56,24 +46,17 @@ page_data = """ ), ( # all children including non-element nodes """ - () => document.querySelector("div#text-node") + () => document.querySelector("#with-text-node") """, { "type": "node", + "sharedId": any_string, "value": { - "attributes": {"id": "text-node"}, - "childNodeCount": 2, + "attributes": {"id": "with-text-node"}, + "childNodeCount": 1, "children": [{ "type": "node", - "value": { - "attributes": {}, - "childNodeCount": 0, - "localName": "p", - "namespaceURI": "http://www.w3.org/1999/xhtml", - "nodeType": 1 - } - },{ - "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "nodeType": 3, @@ -88,15 +71,17 @@ page_data = """ ), ( # children limited due to max depth """ - () => document.querySelector("div#deep") + () => document.querySelector("#with-children") """, { "type": "node", + "sharedId": any_string, "value": { - "attributes": {"id": "deep"}, + "attributes": {"id": "with-children"}, "childNodeCount": 2, "children": [{ "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 1, @@ -104,8 +89,9 @@ page_data = """ "namespaceURI": "http://www.w3.org/1999/xhtml", "nodeType": 1 } - },{ + }, { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, @@ -126,6 +112,7 @@ page_data = """ """, { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, @@ -145,10 +132,10 @@ page_data = """ ] ) async def test_element_node( - bidi_session, inline, top_context, function_declaration, expected + bidi_session, get_test_page, top_context, function_declaration, expected ): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.call_function( @@ -157,7 +144,7 @@ async def test_element_node( await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -166,25 +153,27 @@ async def test_element_node( [ ( """ - () => document.querySelector("svg").attributes[0] + () => document.querySelector("input#button").attributes[0] """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], "localName": "id", "namespaceURI": None, "nodeType": 2, - "nodeValue": "foo", + "nodeValue": "button", }, }, - ),( + ), ( """ - () => document.querySelector("svg").attributes[1] + () => document.querySelector("svg").attributes[0] """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -201,10 +190,10 @@ async def test_element_node( ] ) async def test_attribute_node( - bidi_session, inline, top_context, function_declaration, expected + bidi_session, get_test_page, top_context, function_declaration, expected ): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.call_function( @@ -213,7 +202,7 @@ async def test_attribute_node( await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -222,10 +211,11 @@ async def test_attribute_node( [ ( """ - () => document.querySelector("div#text-node").childNodes[1] + () => document.querySelector("#with-text-node").childNodes[0] """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -238,9 +228,11 @@ async def test_attribute_node( "basic", ] ) -async def test_text_node(bidi_session, inline, top_context, function_declaration, expected): +async def test_text_node( + bidi_session, get_test_page, top_context, function_declaration, expected +): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.call_function( @@ -249,7 +241,7 @@ async def test_text_node(bidi_session, inline, top_context, function_declaration await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -262,6 +254,7 @@ async def test_text_node(bidi_session, inline, top_context, function_declaration """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -287,7 +280,7 @@ async def test_cdata_node(bidi_session, inline, new_tab, function_declaration, e await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -300,6 +293,7 @@ async def test_cdata_node(bidi_session, inline, new_tab, function_declaration, e """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -321,14 +315,13 @@ async def test_processing_instruction_node( context=new_tab['context'], url=xml_page, wait="complete" ) - result = await bidi_session.script.call_function( function_declaration=function_declaration, target=ContextTarget(new_tab["context"]), await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -337,10 +330,11 @@ async def test_processing_instruction_node( [ ( """ - () => document.querySelector("div#comment").childNodes[0] + () => document.querySelector("#with-comment").childNodes[0] """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -354,10 +348,10 @@ async def test_processing_instruction_node( ] ) async def test_comment_node( - bidi_session, inline, top_context, function_declaration, expected + bidi_session, get_test_page, top_context, function_declaration, expected ): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.call_function( @@ -366,7 +360,7 @@ async def test_comment_node( await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -379,16 +373,19 @@ async def test_comment_node( """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 2, "children": [{ "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "nodeType": 10 } }, { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 2, @@ -406,10 +403,10 @@ async def test_comment_node( ] ) async def test_document_node( - bidi_session, inline, top_context, function_declaration, expected + bidi_session, get_test_page, top_context, function_declaration, expected ): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.call_function( @@ -418,7 +415,7 @@ async def test_document_node( await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -431,6 +428,7 @@ async def test_document_node( """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -443,10 +441,10 @@ async def test_document_node( ] ) async def test_doctype_node( - bidi_session, inline, top_context, function_declaration, expected + bidi_session, get_test_page, top_context, function_declaration, expected ): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.call_function( @@ -455,7 +453,7 @@ async def test_doctype_node( await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -464,10 +462,35 @@ async def test_doctype_node( [ ( """ - () => new DocumentFragment() + () => document.querySelector("#custom-element").shadowRoot """, { "type": "node", + "sharedId": any_string, + "value": { + "childNodeCount": 1, + "children": [{ + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"id": "in-shadow-dom"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1 + } + }], + "nodeType": 11 + } + } + ), + ( + """ + () => document.createDocumentFragment() + """, + { + "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -476,14 +499,15 @@ async def test_doctype_node( } ), ], ids=[ - "basic", + "shadow root", + "not connected", ] ) async def test_document_fragment_node( - bidi_session, inline, top_context, function_declaration, expected + bidi_session, get_test_page, top_context, function_declaration, expected ): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.call_function( @@ -492,30 +516,31 @@ async def test_document_fragment_node( await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio -async def test_node_within_object(bidi_session, inline, top_context): +async def test_node_within_object(bidi_session, get_test_page, top_context): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.call_function( - function_declaration="""() => ({"elem": document.querySelector("span")})""", + function_declaration="""() => ({"elem": document.querySelector("img")})""", target=ContextTarget(top_context["context"]), await_promise=False, ) - assert result == { + expected = { "type": "object", "value": [ ["elem", { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, - "localName": "span", + "localName": "img", "namespaceURI": "http://www.w3.org/1999/xhtml", "nodeType": 1 } @@ -523,22 +548,25 @@ async def test_node_within_object(bidi_session, inline, top_context): ] } + recursive_compare(expected, result) + @pytest.mark.asyncio @pytest.mark.parametrize( "function_declaration, expected", [ ( - "() => document.getElementsByTagName('span')", + "() => document.getElementsByTagName('img')", { "type": "htmlcollection", "value": [ { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, - "localName": "span", + "localName": "img", "namespaceURI": "http://www.w3.org/1999/xhtml", "nodeType": 1 } @@ -547,16 +575,17 @@ async def test_node_within_object(bidi_session, inline, top_context): } ), ( - "() => document.querySelectorAll('span')", + "() => document.querySelectorAll('img')", { "type": "nodelist", "value": [ { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, - "localName": "span", + "localName": "img", "namespaceURI": "http://www.w3.org/1999/xhtml", "nodeType": 1 } @@ -571,13 +600,13 @@ async def test_node_within_object(bidi_session, inline, top_context): ) async def test_node_within_dom_collection( bidi_session, - inline, + get_test_page, top_context, function_declaration, expected ): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.call_function( @@ -586,4 +615,4 @@ async def test_node_within_dom_collection( await_promise=False, ) - assert result == expected + recursive_compare(expected, result) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/sandbox.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/sandbox.py index e0a4914d8f6..382ede3c783 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/sandbox.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/call_function/sandbox.py @@ -127,6 +127,23 @@ async def test_sandbox_with_side_effects(bidi_session, new_tab): assert result_in_sandbox_2 == expected_value +@pytest.mark.asyncio +async def test_sandbox_returns_same_node(bidi_session, new_tab): + node = await bidi_session.script.call_function( + function_declaration="() => document.querySelector('body')", + target=ContextTarget(new_tab["context"]), + await_promise=True, + ) + recursive_compare({"type": "node", "sharedId": any_string}, node) + + node_sandbox = await bidi_session.script.call_function( + function_declaration="() => document.querySelector('body')", + target=ContextTarget(new_tab["context"], sandbox="sandbox_1"), + await_promise=True, + ) + assert node_sandbox == node + + @pytest.mark.asyncio async def test_arguments(bidi_session, new_tab): argument = { @@ -135,21 +152,39 @@ async def test_arguments(bidi_session, new_tab): {"type": "string", "value": "foobar"}, ], } + result = await bidi_session.script.call_function( - function_declaration=f"""(arg) => {{ + function_declaration="""(arg) => { if(! (arg instanceof Set)) throw Error("Argument type should be Set, but was "+ Object.prototype.toString.call(arg)); return arg; - }}""", + }""", arguments=[argument], await_promise=False, target=ContextTarget(new_tab["context"], "sandbox"), ) - recursive_compare(argument, result) +@pytest.mark.asyncio +async def test_arguments_uses_same_node_in_sandbox(bidi_session, new_tab): + node = await bidi_session.script.call_function( + function_declaration="() => document.querySelector('body')", + target=ContextTarget(new_tab["context"]), + await_promise=True, + ) + recursive_compare({"type": "node", "sharedId": any_string}, node) + + result = await bidi_session.script.call_function( + function_declaration="""(node) => node.localName""", + arguments=[node], + await_promise=False, + target=ContextTarget(new_tab["context"], "sandbox"), + ) + assert result == {"type": "string", "value": "body"} + + @pytest.mark.asyncio @pytest.mark.parametrize("await_promise", [True, False]) async def test_exception_details(bidi_session, new_tab, await_promise): diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/classic_interop/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/classic_interop/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/classic_interop/node_shared_id.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/classic_interop/node_shared_id.py new file mode 100644 index 00000000000..410d029207c --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/classic_interop/node_shared_id.py @@ -0,0 +1,72 @@ +import pytest + +from webdriver import Element, ShadowRoot +from webdriver.bidi.modules.script import ContextTarget + +pytestmark = pytest.mark.asyncio + + +@pytest.mark.parametrize( + "expression, expected_node_type", + [ + ("""return document.querySelector("div#with-children")""", 1), + ("""return document.querySelector("custom-element").shadowRoot""", 11), + ], + ids=["Element", "ShadowRoot"], +) +async def test_web_reference_created_in_classic( + bidi_session, + current_session, + get_test_page, + top_context, + expression, + expected_node_type +): + current_session.url = get_test_page() + + node = current_session.execute_script(expression) + shared_id = node.id + + # Use element reference from WebDriver classic in WebDriver BiDi + result = await bidi_session.script.call_function( + function_declaration="(node)=>{return node.nodeType}", + arguments=[{"sharedId": shared_id}], + await_promise=False, + target=ContextTarget(top_context["context"]), + ) + + assert result == {"type": "number", "value": expected_node_type} + + +@pytest.mark.parametrize( + "expression, expected", + [ + ("""document.querySelector("div#with-children")""", 1), + ("""document.querySelector("custom-element").shadowRoot""", 11), + ], + ids=["Element", "ShadowRoot"], +) +async def test_web_reference_created_in_bidi( + bidi_session, + current_session, + get_test_page, + top_context, + expression, + expected +): + current_session.url = get_test_page() + + result = await bidi_session.script.evaluate( + expression=expression, + target=ContextTarget(top_context["context"]), + await_promise=False, + ) + + nodeType = result["value"]["nodeType"] + assert nodeType == expected + + # Use web reference from WebDriver BiDi in WebDriver classic + types = {1: Element, 11: ShadowRoot} + node = types[nodeType](current_session, result["sharedId"]) + nodeType = current_session.execute_script("""return arguments[0].nodeType""", args=(node,)) + assert nodeType == expected diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/__init__.py index e69de29bb2d..8b137891791 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/__init__.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/__init__.py @@ -0,0 +1 @@ + diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/result_node.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/result_node.py index 0d0589a5f38..63915a8f4a4 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/result_node.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/result_node.py @@ -1,18 +1,7 @@ import pytest from webdriver.bidi.modules.script import ContextTarget - -page_data = """ -


    -

    Lorem
    -
    - -
    - -""" +from ... import any_string, recursive_compare @pytest.mark.asyncio @@ -25,6 +14,7 @@ page_data = """ """, { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, @@ -41,9 +31,9 @@ page_data = """ """, { "type": "node", + "sharedId": any_string, "value": { "attributes": { - "id": "foo", "svg:foo": "bar", }, "childNodeCount": 0, @@ -56,24 +46,17 @@ page_data = """ ), ( # all children including non-element nodes """ - document.querySelector("div#text-node") + document.querySelector("#with-text-node") """, { "type": "node", + "sharedId": any_string, "value": { - "attributes": {"id": "text-node"}, - "childNodeCount": 2, + "attributes": {"id": "with-text-node"}, + "childNodeCount": 1, "children": [{ "type": "node", - "value": { - "attributes": {}, - "childNodeCount": 0, - "localName": "p", - "namespaceURI": "http://www.w3.org/1999/xhtml", - "nodeType": 1 - } - },{ - "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "nodeType": 3, @@ -88,15 +71,17 @@ page_data = """ ), ( # children limited due to max depth """ - document.querySelector("div#deep") + document.querySelector("#with-children") """, { "type": "node", + "sharedId": any_string, "value": { - "attributes": {"id": "deep"}, + "attributes": {"id": "with-children"}, "childNodeCount": 2, "children": [{ "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 1, @@ -104,8 +89,9 @@ page_data = """ "namespaceURI": "http://www.w3.org/1999/xhtml", "nodeType": 1 } - },{ + }, { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, @@ -126,6 +112,7 @@ page_data = """ """, { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, @@ -144,9 +131,9 @@ page_data = """ "not_connected", ] ) -async def test_element_node(bidi_session, inline, top_context, expression, expected): +async def test_element_node(bidi_session, get_test_page, top_context, expression, expected): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.evaluate( @@ -155,7 +142,7 @@ async def test_element_node(bidi_session, inline, top_context, expression, expec await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -164,25 +151,27 @@ async def test_element_node(bidi_session, inline, top_context, expression, expec [ ( """ - document.querySelector("svg").attributes[0] + document.querySelector("input#button").attributes[0] """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], "localName": "id", "namespaceURI": None, "nodeType": 2, - "nodeValue": "foo", + "nodeValue": "button", }, }, - ),( + ), ( """ - document.querySelector("svg").attributes[1] + document.querySelector("svg").attributes[0] """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -195,12 +184,12 @@ async def test_element_node(bidi_session, inline, top_context, expression, expec ), ], ids=[ "basic", - "namespace", + "namespaceURI", ] ) -async def test_attribute_node(bidi_session, inline, top_context, expression, expected): +async def test_attribute_node(bidi_session, get_test_page, top_context, expression, expected): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.evaluate( @@ -209,7 +198,7 @@ async def test_attribute_node(bidi_session, inline, top_context, expression, exp await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -218,10 +207,11 @@ async def test_attribute_node(bidi_session, inline, top_context, expression, exp [ ( """ - document.querySelector("div#text-node").childNodes[1] + document.querySelector("#with-text-node").childNodes[0] """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -234,9 +224,9 @@ async def test_attribute_node(bidi_session, inline, top_context, expression, exp "basic", ] ) -async def test_text_node(bidi_session, inline, top_context, expression, expected): +async def test_text_node(bidi_session, get_test_page, top_context, expression, expected): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.evaluate( @@ -245,7 +235,7 @@ async def test_text_node(bidi_session, inline, top_context, expression, expected await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -258,6 +248,7 @@ async def test_text_node(bidi_session, inline, top_context, expression, expected """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -283,7 +274,7 @@ async def test_cdata_node(bidi_session, inline, new_tab, expression, expected): await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -296,6 +287,7 @@ async def test_cdata_node(bidi_session, inline, new_tab, expression, expected): """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -317,14 +309,13 @@ async def test_processing_instruction_node( context=new_tab['context'], url=xml_page, wait="complete" ) - result = await bidi_session.script.evaluate( expression=expression, target=ContextTarget(new_tab["context"]), await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -333,10 +324,11 @@ async def test_processing_instruction_node( [ ( """ - document.querySelector("div#comment").childNodes[0] + document.querySelector("#with-comment").childNodes[0] """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -349,9 +341,9 @@ async def test_processing_instruction_node( "basic", ] ) -async def test_comment_node(bidi_session, inline, top_context, expression, expected): +async def test_comment_node(bidi_session, get_test_page, top_context, expression, expected): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.evaluate( @@ -360,7 +352,7 @@ async def test_comment_node(bidi_session, inline, top_context, expression, expec await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -373,16 +365,19 @@ async def test_comment_node(bidi_session, inline, top_context, expression, expec """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 2, "children": [{ "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "nodeType": 10 } }, { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 2, @@ -399,9 +394,9 @@ async def test_comment_node(bidi_session, inline, top_context, expression, expec "basic", ] ) -async def test_document_node(bidi_session, inline, top_context, expression, expected): +async def test_document_node(bidi_session, get_test_page, top_context, expression, expected): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.evaluate( @@ -410,7 +405,7 @@ async def test_document_node(bidi_session, inline, top_context, expression, expe await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @@ -423,6 +418,7 @@ async def test_document_node(bidi_session, inline, top_context, expression, expe """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -434,9 +430,9 @@ async def test_document_node(bidi_session, inline, top_context, expression, expe "basic", ] ) -async def test_doctype_node(bidi_session, inline, top_context, expression, expected): +async def test_doctype_node(bidi_session, get_test_page, top_context, expression, expected): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.evaluate( @@ -445,19 +441,44 @@ async def test_doctype_node(bidi_session, inline, top_context, expression, expec await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio @pytest.mark.parametrize( "expression, expected", [ + ( + """ + document.querySelector("#custom-element").shadowRoot; + """, + { + "type": "node", + "sharedId": any_string, + "value": { + "childNodeCount": 1, + "children": [{ + "type": "node", + "sharedId": any_string, + "value": { + "attributes": {"id": "in-shadow-dom"}, + "childNodeCount": 1, + "localName": "div", + "namespaceURI": "http://www.w3.org/1999/xhtml", + "nodeType": 1 + } + }], + "nodeType": 11 + } + } + ), ( """ new DocumentFragment(); """, { "type": "node", + "sharedId": any_string, "value": { "childNodeCount": 0, "children": [], @@ -466,14 +487,15 @@ async def test_doctype_node(bidi_session, inline, top_context, expression, expec } ), ], ids=[ - "basic", + "shadowRoot", + "not connected" ] ) async def test_document_fragment_node( - bidi_session, inline, top_context, expression, expected + bidi_session, get_test_page, top_context, expression, expected ): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.evaluate( @@ -482,30 +504,31 @@ async def test_document_fragment_node( await_promise=False, ) - assert result == expected + recursive_compare(expected, result) @pytest.mark.asyncio -async def test_node_within_object(bidi_session, inline, top_context): +async def test_node_within_object(bidi_session, get_test_page, top_context): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.evaluate( - expression="""({"elem": document.querySelector("span")})""", + expression="""({"elem": document.querySelector("img")})""", target=ContextTarget(top_context["context"]), await_promise=False, ) - assert result == { + expected = { "type": "object", "value": [ ["elem", { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, - "localName": "span", + "localName": "img", "namespaceURI": "http://www.w3.org/1999/xhtml", "nodeType": 1 } @@ -513,22 +536,25 @@ async def test_node_within_object(bidi_session, inline, top_context): ] } + recursive_compare(expected, result) + @pytest.mark.asyncio @pytest.mark.parametrize( "expression, expected", [ ( - "document.getElementsByTagName('span')", + "document.getElementsByTagName('img')", { "type": "htmlcollection", "value": [ { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, - "localName": "span", + "localName": "img", "namespaceURI": "http://www.w3.org/1999/xhtml", "nodeType": 1 } @@ -537,16 +563,17 @@ async def test_node_within_object(bidi_session, inline, top_context): } ), ( - "document.querySelectorAll('span')", + "document.querySelectorAll('img')", { "type": "nodelist", "value": [ { "type": "node", + "sharedId": any_string, "value": { "attributes": {}, "childNodeCount": 0, - "localName": "span", + "localName": "img", "namespaceURI": "http://www.w3.org/1999/xhtml", "nodeType": 1 } @@ -561,13 +588,13 @@ async def test_node_within_object(bidi_session, inline, top_context): ) async def test_node_within_dom_collection( bidi_session, - inline, + get_test_page, top_context, expression, expected ): await bidi_session.browsing_context.navigate( - context=top_context['context'], url=inline(page_data), wait="complete" + context=top_context['context'], url=get_test_page(), wait="complete" ) result = await bidi_session.script.evaluate( @@ -576,4 +603,4 @@ async def test_node_within_dom_collection( await_promise=False, ) - assert result == expected + recursive_compare(expected, result) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/sandbox.py b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/sandbox.py index ba4eb732d16..3a6771780d5 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/sandbox.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/bidi/script/evaluate/sandbox.py @@ -127,6 +127,23 @@ async def test_sandbox_with_side_effects(bidi_session, new_tab): assert result_in_sandbox_2 == expected_value +@pytest.mark.asyncio +async def test_sandbox_returns_same_node(bidi_session, new_tab): + node = await bidi_session.script.evaluate( + expression="document.querySelector('body')", + target=ContextTarget(new_tab["context"]), + await_promise=True, + ) + recursive_compare({"type": "node", "sharedId": any_string}, node) + + node_sandbox = await bidi_session.script.evaluate( + expression="document.querySelector('body')", + target=ContextTarget(new_tab["context"], sandbox="sandbox_1"), + await_promise=True, + ) + assert node_sandbox == node + + @pytest.mark.asyncio @pytest.mark.parametrize("await_promise", [True, False]) async def test_exception_details(bidi_session, new_tab, await_promise): diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_clear/clear.py b/tests/wpt/web-platform-tests/webdriver/tests/element_clear/clear.py index fa96ed3a58a..9b0d7f2133f 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/element_clear/clear.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_clear/clear.py @@ -45,7 +45,7 @@ def test_null_response_value(session, inline): def test_no_top_browsing_context(session, closed_window): - element = Element("foo", session) + element = Element(session, "foo") response = element_clear(session, element) assert_error(response, "no such window") @@ -59,14 +59,14 @@ def test_no_top_browsing_context(session, closed_window): def test_no_browsing_context(session, closed_frame): - element = Element("foo", session) + element = Element(session, "foo") response = element_clear(session, element) assert_error(response, "no such window") def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") response = element_clear(session, element) assert_error(response, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_click/click.py b/tests/wpt/web-platform-tests/webdriver/tests/element_click/click.py index 79be957d1b2..3c3f7d70e6c 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/element_click/click.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_click/click.py @@ -21,7 +21,7 @@ def test_null_response_value(session, inline): def test_no_top_browsing_context(session, closed_window): - element = Element("foo", session) + element = Element(session, "foo") response = element_click(session, element) assert_error(response, "no such window") @@ -35,14 +35,14 @@ def test_no_top_browsing_context(session, closed_window): def test_no_browsing_context(session, closed_frame): - element = Element("foo", session) + element = Element(session, "foo") response = element_click(session, element) assert_error(response, "no such window") def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") response = element_click(session, element) assert_error(response, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_send_keys/send_keys.py b/tests/wpt/web-platform-tests/webdriver/tests/element_send_keys/send_keys.py index 854d2af42cc..281c7ad719d 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/element_send_keys/send_keys.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/element_send_keys/send_keys.py @@ -34,7 +34,7 @@ def test_null_response_value(session, inline): def test_no_top_browsing_context(session, closed_window): - element = Element("foo", session) + element = Element(session, "foo") response = element_send_keys(session, element, "foo") assert_error(response, "no such window") @@ -48,14 +48,14 @@ def test_no_top_browsing_context(session, closed_window): def test_no_browsing_context(session, closed_frame): - element = Element("foo", session) + element = Element(session, "foo") response = element_send_keys(session, element, "foo") assert_error(response, "no such window") def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") response = element_send_keys(session, element, "foo") assert_error(response, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/execute_async_script/arguments.py b/tests/wpt/web-platform-tests/webdriver/tests/execute_async_script/arguments.py index 55fd9527aea..ead6e0c186e 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/execute_async_script/arguments.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/execute_async_script/arguments.py @@ -55,7 +55,7 @@ def test_object(session): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") result = execute_async_script(session, """ arguments[1](true); diff --git a/tests/wpt/web-platform-tests/webdriver/tests/execute_script/arguments.py b/tests/wpt/web-platform-tests/webdriver/tests/execute_script/arguments.py index 53c49aaa689..b8657ce0efa 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/execute_script/arguments.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/execute_script/arguments.py @@ -47,7 +47,7 @@ def test_object(session): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") result = execute_script(session, "return true;", args=[element]) assert_error(result, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_computed_label/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_computed_label/get.py index 8124fee0c9d..0dc00a471a9 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/get_computed_label/get.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_computed_label/get.py @@ -19,7 +19,7 @@ def test_no_browsing_context(session, closed_frame): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") result = get_computed_label(session, element.id) assert_error(result, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_computed_role/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_computed_role/get.py index dcfe753f0dc..8d15e8fb90d 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/get_computed_role/get.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_computed_role/get.py @@ -19,7 +19,7 @@ def test_no_browsing_context(session, closed_frame): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") result = get_computed_role(session, element.id) assert_error(result, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_attribute/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_attribute/get.py index e23d7e4d5ab..375f25032c0 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/get_element_attribute/get.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_attribute/get.py @@ -30,7 +30,7 @@ def test_no_browsing_context(session, closed_frame): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") response = get_element_attribute(session, element.id, "id") assert_error(response, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/get.py index f9797c2cff5..6f0a8a56395 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/get.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/get.py @@ -34,7 +34,7 @@ def test_no_browsing_context(session, closed_frame): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") response = get_element_css_value(session, element.id, "display") assert_error(response, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_property/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_property/get.py index 072375804e8..84e4e896281 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/get_element_property/get.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_property/get.py @@ -31,7 +31,7 @@ def test_no_browsing_context(session, closed_frame): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") response = get_element_property(session, element.id, "id") assert_error(response, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/get.py index 7f87b44e7e9..942f119f43c 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/get.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/get.py @@ -34,7 +34,7 @@ def test_no_browsing_context(session, closed_frame): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") response = get_element_rect(session, element.id) assert_error(response, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_shadow_root/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_shadow_root/get.py index 61d0d008100..d9adde0b9e3 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/get_element_shadow_root/get.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_shadow_root/get.py @@ -30,7 +30,7 @@ def test_no_browsing_context(session, closed_frame): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") response = get_shadow_root(session, element.id) assert_error(response, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_tag_name/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_tag_name/get.py index 1bf19309e45..3bb03d79886 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/get_element_tag_name/get.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_tag_name/get.py @@ -30,7 +30,7 @@ def test_no_browsing_context(session, closed_frame): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") response = get_element_tag_name(session, element.id) assert_error(response, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_text/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_text/get.py index aa36c487c80..e8d559cf661 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/get_element_text/get.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_text/get.py @@ -30,7 +30,7 @@ def test_no_browsing_context(session, closed_frame): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") response = get_element_text(session, element.id) assert_error(response, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/enabled.py b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/enabled.py index 34e5cce4197..fccff383a55 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/enabled.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/enabled.py @@ -33,7 +33,7 @@ def test_no_browsing_context(session, closed_frame): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") response = is_element_enabled(session, element.id) assert_error(response, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/is_element_selected/selected.py b/tests/wpt/web-platform-tests/webdriver/tests/is_element_selected/selected.py index b119705e7dd..1fb5b9ce86b 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/is_element_selected/selected.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/is_element_selected/selected.py @@ -49,7 +49,7 @@ def test_no_browsing_context(session, closed_frame): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") response = is_element_selected(session, element.id) assert_error(response, "no such element") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/print/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/print/__init__.py index 788c0e1a317..e69de29bb2d 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/print/__init__.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/print/__init__.py @@ -1,21 +0,0 @@ -def load_pdf_document(session, inline, pdf_data): - """Load a PDF document in the browser using pdf.js""" - session.url = inline(""" - - - - -""" % pdf_data) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/print/printcmd.py b/tests/wpt/web-platform-tests/webdriver/tests/print/printcmd.py index 169e2249a99..415786675c5 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/print/printcmd.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/print/printcmd.py @@ -3,7 +3,6 @@ from base64 import decodebytes import pytest -from . import load_pdf_document from tests.support.asserts import assert_error, assert_success @@ -91,7 +90,7 @@ def test_large_html_document(session, inline): (["-5", "2-"], ["Page 1", "Page 2", "Page 3", "Page 4", "Page 5", "Page 6", "Page 7", "Page 8", "Page 9", "Page 10"]), ([], ["Page 1", "Page 2", "Page 3", "Page 4", "Page 5", "Page 6", "Page 7", "Page 8", "Page 9", "Page 10"]), ]) -def test_page_ranges_document(session, inline, ranges, expected): +def test_page_ranges_document(session, inline, load_pdf_document, ranges, expected): session.url = inline(""" +
    + +
    + """ + + page_data = f""" + +


    +
    Lorem
    +
    + + + + + + + + {iframe(frame_doc)} + + + + + + """ + + if as_frame: + return inline(iframe(page_data)) + else: + return inline(page_data) + + return get_test_page + + +@pytest.fixture +def test_page_with_pdf_js(inline): + """Prepare an url to load a PDF document in the browser using pdf.js""" + def test_page_with_pdf_js(encoded_pdf_data): + return inline(""" + + + + +""" % encoded_pdf_data) + + return test_page_with_pdf_js + + @pytest.fixture async def top_context(bidi_session): contexts = await bidi_session.browsing_context.get_tree() diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_bidi.py b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_bidi.py index 6273b8f1575..6f1106373d9 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_bidi.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_bidi.py @@ -140,3 +140,33 @@ def add_and_remove_iframe(bidi_session, inline): return frame_id return closed_frame + + +@pytest.fixture +def load_pdf(bidi_session, test_page_with_pdf_js, top_context): + """Load a PDF document in the browser using pdf.js""" + async def load_pdf(encoded_pdf_data, context=top_context["context"]): + url = test_page_with_pdf_js(encoded_pdf_data) + + await bidi_session.browsing_context.navigate( + context=context, url=url, wait="complete" + ) + + return load_pdf + + +@pytest.fixture +def get_pdf_content(bidi_session, top_context, load_pdf): + """Load a PDF document in the browser using pdf.js and extract content from the document""" + async def get_pdf_content(encoded_pdf_data, context=top_context["context"]): + await load_pdf(encoded_pdf_data=encoded_pdf_data, context=context) + + result = await bidi_session.script.call_function( + function_declaration="""() => { return window.getText()}""", + target=ContextTarget(context), + await_promise=True, + ) + + return result + + return get_pdf_content diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_http.py b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_http.py index 748fe214a2b..65ea064c519 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_http.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/support/fixtures_http.py @@ -178,89 +178,9 @@ def stale_element(current_session, get_test_page): @pytest.fixture -def get_test_page(iframe, inline): - def get_test_page( - as_frame=False, - frame_doc=None, - shadow_doc=None, - nested_shadow_dom=False - ): - if frame_doc is None: - frame_doc = """
    """ +def load_pdf_document(current_session, test_page_with_pdf_js): + """Load a PDF document in the browser using pdf.js""" + def load_pdf_document(encoded_pdf_data): + current_session.url = test_page_with_pdf_js(encoded_pdf_data) - if shadow_doc is None: - shadow_doc = """ -
    - -
    - """ - - definition_inner_shadow_dom = "" - if nested_shadow_dom: - definition_inner_shadow_dom = f""" - customElements.define('inner-custom-element', - class extends HTMLElement {{ - constructor() {{ - super(); - this.attachShadow({{mode: "open"}}).innerHTML = ` - {shadow_doc} - `; - }} - }} - ); - """ - shadow_doc = """ - -
    - -
    - """ - - page_data = f""" - -


    -
    Lorem
    -
    - - - - - - - - {iframe(frame_doc)} - - - - - """ - - if as_frame: - return inline(iframe(page_data)) - else: - return inline(page_data) - - return get_test_page + return load_pdf_document diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py index deea9514ed4..ea4cc290db4 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py @@ -33,7 +33,7 @@ def test_no_browsing_context(session, closed_frame, inline): def test_no_such_element_with_invalid_value(session): - element = Element("foo", session) + element = Element(session, "foo") response = take_element_screenshot(session, element.id) assert_error(response, "no such element") diff --git a/tests/wpt/web-platform-tests/webrtc-extensions/RTCRtpTransceiver-headerExtensionControl.html b/tests/wpt/web-platform-tests/webrtc-extensions/RTCRtpTransceiver-headerExtensionControl.html index 770aa49f052..b6dc7da5d40 100644 --- a/tests/wpt/web-platform-tests/webrtc-extensions/RTCRtpTransceiver-headerExtensionControl.html +++ b/tests/wpt/web-platform-tests/webrtc-extensions/RTCRtpTransceiver-headerExtensionControl.html @@ -57,10 +57,10 @@ test(function(t) { const transceiver = pc.addTransceiver('audio'); const capabilities = transceiver.getHeaderExtensionsToNegotiate(); capabilities[0].uri = "4711"; - assert_throws_dom("NotSupportedError", () => { + assert_throws_dom('InvalidModificationError', () => { transceiver.setHeaderExtensionsToNegotiate(capabilities); - }, 'transceiver should throw NotSupported when setting an unknown URI'); -}, `setHeaderExtensionsToNegotiate throws NotSupported on encountering unknown URI`); + }, 'transceiver should throw InvalidModificationError when setting an unknown URI'); +}, `setHeaderExtensionsToNegotiate throws InvalidModificationError on encountering unknown URI`); test(function(t) { const pc = new RTCPeerConnection(); @@ -72,7 +72,7 @@ test(function(t) { }); ["sendonly", "recvonly", "inactive", "stopped"].map(direction => { capability.direction = direction; - assert_throws_dom("InvalidModificationError", () => { + assert_throws_dom('InvalidModificationError', () => { transceiver.setHeaderExtensionsToNegotiate(capabilities); }, `transceiver should throw InvalidModificationError when setting a mandatory header extension\'s direction to ${direction}`); }); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html index 8062618dd61..96e763985c0 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html @@ -187,8 +187,8 @@ 8.5. The stats selection algorithm 3. If selector is an RTCRtpSender, gather stats for and add the following objects to result: - - All RTCOutboundRTPStreamStats objects corresponding to selector. - - All stats objects referenced directly or indirectly by the RTCOutboundRTPStreamStats + - All RTCOutboundRtpStreamStats objects corresponding to selector. + - All stats objects referenced directly or indirectly by the RTCOutboundRtpStreamStats objects added. */ promise_test(async t => { @@ -208,8 +208,8 @@ 8.5. The stats selection algorithm 4. If selector is an RTCRtpReceiver, gather stats for and add the following objects to result: - - All RTCInboundRTPStreamStats objects corresponding to selector. - - All stats objects referenced directly or indirectly by the RTCInboundRTPStreamStats + - All RTCInboundRtpStreamStats objects corresponding to selector. + - All stats objects referenced directly or indirectly by the RTCInboundRtpStreamStats added. */ promise_test(async t => { diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html index 06d0f0b39bf..b8daf12fc27 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpReceiver-getStats.https.html @@ -40,8 +40,8 @@ 8.5. The stats selection algorithm 4. If selector is an RTCRtpReceiver, gather stats for and add the following objects to result: - - All RTCInboundRTPStreamStats objects corresponding to selector. - - All stats objects referenced directly or indirectly by the RTCInboundRTPStreamStats + - All RTCInboundRtpStreamStats objects corresponding to selector. + - All stats objects referenced directly or indirectly by the RTCInboundRtpStreamStats added. */ diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html index 27ac3e952f1..62c01aafa6a 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpSender-getStats.https.html @@ -35,8 +35,8 @@ 8.5. The stats selection algorithm 3. If selector is an RTCRtpSender, gather stats for and add the following objects to result: - - All RTCOutboundRTPStreamStats objects corresponding to selector. - - All stats objects referenced directly or indirectly by the RTCOutboundRTPStreamStats + - All RTCOutboundRtpStreamStats objects corresponding to selector. + - All stats objects referenced directly or indirectly by the RTCOutboundRtpStreamStats objects added. */ diff --git a/tests/wpt/web-platform-tests/workers/Worker_script_mimetype.htm b/tests/wpt/web-platform-tests/workers/Worker_script_mimetype.htm index 4768fe70bcb..d2278d3717c 100644 --- a/tests/wpt/web-platform-tests/workers/Worker_script_mimetype.htm +++ b/tests/wpt/web-platform-tests/workers/Worker_script_mimetype.htm @@ -1,6 +1,7 @@ Worker constructor with wrong MIME type scripts +