diff options
288 files changed, 7770 insertions, 1013 deletions
diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini new file mode 100644 index 00000000000..f64b45fea6b --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-002.html.ini @@ -0,0 +1,4 @@ +[hit-test-floats-002.html] + [Hit test float] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini deleted file mode 100644 index f29da48a2a0..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-003.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[hit-test-floats-003.html] - [Miss float below something else] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini deleted file mode 100644 index 4bfb0c2053a..00000000000 --- a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-004.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[hit-test-floats-004.html] - [Miss float below something else] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini new file mode 100644 index 00000000000..baa9f1a7541 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/CSS2/floats/hit-test-floats-005.html.ini @@ -0,0 +1,4 @@ +[hit-test-floats-005.html] + [Miss clipped float] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001.html.ini new file mode 100644 index 00000000000..286b53b6e31 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001.html.ini @@ -0,0 +1,4 @@ +[image-as-flexitem-size-001.html] + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001v.html.ini new file mode 100644 index 00000000000..3684416f5b5 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-001v.html.ini @@ -0,0 +1,4 @@ +[image-as-flexitem-size-001v.html] + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002.html.ini new file mode 100644 index 00000000000..dbe4233a739 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002.html.ini @@ -0,0 +1,4 @@ +[image-as-flexitem-size-002.html] + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002v.html.ini new file mode 100644 index 00000000000..a0b5e69c4be --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-002v.html.ini @@ -0,0 +1,4 @@ +[image-as-flexitem-size-002v.html] + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003.html.ini new file mode 100644 index 00000000000..8fde903bd12 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003.html.ini @@ -0,0 +1,19 @@ +[image-as-flexitem-size-003.html] + [.flexbox > img 16] + expected: FAIL + + [.flexbox > img 11] + expected: FAIL + + [.flexbox > img 10] + expected: FAIL + + [.flexbox > img 13] + expected: FAIL + + [.flexbox > img 12] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003v.html.ini new file mode 100644 index 00000000000..0865c9cb19c --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-003v.html.ini @@ -0,0 +1,19 @@ +[image-as-flexitem-size-003v.html] + [.flexbox > img 16] + expected: FAIL + + [.flexbox > img 11] + expected: FAIL + + [.flexbox > img 10] + expected: FAIL + + [.flexbox > img 13] + expected: FAIL + + [.flexbox > img 12] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004.html.ini new file mode 100644 index 00000000000..da649930a95 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004.html.ini @@ -0,0 +1,34 @@ +[image-as-flexitem-size-004.html] + [.flexbox > img 15] + expected: FAIL + + [.flexbox > img 11] + expected: FAIL + + [.flexbox > img 10] + expected: FAIL + + [.flexbox > img 13] + expected: FAIL + + [.flexbox > img 8] + expected: FAIL + + [.flexbox > img 5] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + + [.flexbox > img 7] + expected: FAIL + + [.flexbox > img 6] + expected: FAIL + + [.flexbox > img 1] + expected: FAIL + + [.flexbox > img 3] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004v.html.ini new file mode 100644 index 00000000000..2a0b3330dc4 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-004v.html.ini @@ -0,0 +1,34 @@ +[image-as-flexitem-size-004v.html] + [.flexbox > img 15] + expected: FAIL + + [.flexbox > img 11] + expected: FAIL + + [.flexbox > img 10] + expected: FAIL + + [.flexbox > img 13] + expected: FAIL + + [.flexbox > img 8] + expected: FAIL + + [.flexbox > img 5] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + + [.flexbox > img 7] + expected: FAIL + + [.flexbox > img 6] + expected: FAIL + + [.flexbox > img 1] + expected: FAIL + + [.flexbox > img 3] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005.html.ini new file mode 100644 index 00000000000..ccc0bc2253a --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005.html.ini @@ -0,0 +1,43 @@ +[image-as-flexitem-size-005.html] + [.flexbox > img 15] + expected: FAIL + + [.flexbox > img 16] + expected: FAIL + + [.flexbox > img 11] + expected: FAIL + + [.flexbox > img 10] + expected: FAIL + + [.flexbox > img 13] + expected: FAIL + + [.flexbox > img 18] + expected: FAIL + + [.flexbox > img 8] + expected: FAIL + + [.flexbox > img 5] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + + [.flexbox > img 7] + expected: FAIL + + [.flexbox > img 6] + expected: FAIL + + [.flexbox > img 1] + expected: FAIL + + [.flexbox > img 3] + expected: FAIL + + [.flexbox > img 2] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005v.html.ini new file mode 100644 index 00000000000..3ae5a431843 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-005v.html.ini @@ -0,0 +1,43 @@ +[image-as-flexitem-size-005v.html] + [.flexbox > img 15] + expected: FAIL + + [.flexbox > img 16] + expected: FAIL + + [.flexbox > img 11] + expected: FAIL + + [.flexbox > img 10] + expected: FAIL + + [.flexbox > img 13] + expected: FAIL + + [.flexbox > img 18] + expected: FAIL + + [.flexbox > img 8] + expected: FAIL + + [.flexbox > img 5] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + + [.flexbox > img 7] + expected: FAIL + + [.flexbox > img 6] + expected: FAIL + + [.flexbox > img 1] + expected: FAIL + + [.flexbox > img 3] + expected: FAIL + + [.flexbox > img 2] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006.html.ini new file mode 100644 index 00000000000..3dc2eb00fc7 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006.html.ini @@ -0,0 +1,43 @@ +[image-as-flexitem-size-006.html] + [.flexbox > img 15] + expected: FAIL + + [.flexbox > img 14] + expected: FAIL + + [.flexbox > img 17] + expected: FAIL + + [.flexbox > img 12] + expected: FAIL + + [.flexbox > img 18] + expected: FAIL + + [.flexbox > img 9] + expected: FAIL + + [.flexbox > img 8] + expected: FAIL + + [.flexbox > img 5] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + + [.flexbox > img 7] + expected: FAIL + + [.flexbox > img 6] + expected: FAIL + + [.flexbox > img 1] + expected: FAIL + + [.flexbox > img 3] + expected: FAIL + + [.flexbox > img 2] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006v.html.ini new file mode 100644 index 00000000000..9eb2855ec46 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-006v.html.ini @@ -0,0 +1,43 @@ +[image-as-flexitem-size-006v.html] + [.flexbox > img 15] + expected: FAIL + + [.flexbox > img 14] + expected: FAIL + + [.flexbox > img 17] + expected: FAIL + + [.flexbox > img 12] + expected: FAIL + + [.flexbox > img 18] + expected: FAIL + + [.flexbox > img 9] + expected: FAIL + + [.flexbox > img 8] + expected: FAIL + + [.flexbox > img 5] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + + [.flexbox > img 7] + expected: FAIL + + [.flexbox > img 6] + expected: FAIL + + [.flexbox > img 1] + expected: FAIL + + [.flexbox > img 3] + expected: FAIL + + [.flexbox > img 2] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007.html.ini new file mode 100644 index 00000000000..495ce451b17 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007.html.ini @@ -0,0 +1,4 @@ +[image-as-flexitem-size-007.html] + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007v.html.ini b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007v.html.ini new file mode 100644 index 00000000000..416bfb37196 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/css-flexbox/image-as-flexitem-size-007v.html.ini @@ -0,0 +1,4 @@ +[image-as-flexitem-size-007v.html] + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini new file mode 100644 index 00000000000..4c79907309b --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/cssom-view/CaretPosition-001.html.ini @@ -0,0 +1,4 @@ +[CaretPosition-001.html] + [Element at (400, 100)] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini new file mode 100644 index 00000000000..e38782d8c85 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/cssom-view/elementFromPoint-001.html.ini @@ -0,0 +1,4 @@ +[elementFromPoint-001.html] + [CSSOM View - 5 - extensions to the Document interface] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini deleted file mode 100644 index e181af5397f..00000000000 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/elementsFromPoint-invalid-cases.html.ini +++ /dev/null @@ -1,4 +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-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini deleted file mode 100644 index e6e1f29e274..00000000000 --- a/tests/wpt/metadata-layout-2020/css/cssom-view/matchMedia-display-none-iframe.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[matchMedia-display-none-iframe.html] - expected: ERROR diff --git a/tests/wpt/metadata-layout-2020/css/selectors/is-where-error-recovery.tentative.html.ini b/tests/wpt/metadata-layout-2020/css/selectors/is-where-error-recovery.tentative.html.ini new file mode 100644 index 00000000000..fb4b13050d0 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/selectors/is-where-error-recovery.tentative.html.ini @@ -0,0 +1,4 @@ +[is-where-error-recovery.tentative.html] + [CSS Selectors: :is() and :where() error recovery] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/selectors/parsing/is.html.ini b/tests/wpt/metadata-layout-2020/css/selectors/parsing/is.html.ini new file mode 100644 index 00000000000..941fc56bf74 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/selectors/parsing/is.html.ini @@ -0,0 +1,19 @@ +[is.html] + [":is(#a)" should be a valid selector] + expected: FAIL + + [".a.b ~ :is(.c.d ~ .e.f)" should be a valid selector] + expected: FAIL + + [".a.b ~ .c.d:is(span.e + .f, .g.h > .i.j .k)" should be a valid selector] + expected: FAIL + + [":is(:hover,:focus)" should be a valid selector] + expected: FAIL + + ["a:is(:not(:hover))" should be a valid selector] + expected: FAIL + + [":is(ul,ol,.list) > [hidden\]" should be a valid selector] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/css/selectors/parsing/where.html.ini b/tests/wpt/metadata-layout-2020/css/selectors/parsing/where.html.ini new file mode 100644 index 00000000000..188d18b9618 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/css/selectors/parsing/where.html.ini @@ -0,0 +1,19 @@ +[where.html] + [":where(#a)" should be a valid selector] + expected: FAIL + + [":where(:hover,:focus)" should be a valid selector] + expected: FAIL + + [".a.b ~ .c.d:where(span.e + .f, .g.h > .i.j .k)" should be a valid selector] + expected: FAIL + + [":where(ul,ol,.list) > [hidden\]" should be a valid selector] + expected: FAIL + + ["a:where(:not(:hover))" should be a valid selector] + expected: FAIL + + [".a.b ~ :where(.c.d ~ .e.f)" should be a valid selector] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/custom-elements/form-associated/form-elements-namedItem.html.ini b/tests/wpt/metadata-layout-2020/custom-elements/form-associated/form-elements-namedItem.html.ini new file mode 100644 index 00000000000..68ebf17de8b --- /dev/null +++ b/tests/wpt/metadata-layout-2020/custom-elements/form-associated/form-elements-namedItem.html.ini @@ -0,0 +1,4 @@ +[form-elements-namedItem.html] + [Form associated custom elements should work with document.forms.elements.namedItem()] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/fetch/connection-pool/network-partition-key.html.ini b/tests/wpt/metadata-layout-2020/fetch/connection-pool/network-partition-key.html.ini new file mode 100644 index 00000000000..890d1fb5747 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/fetch/connection-pool/network-partition-key.html.ini @@ -0,0 +1,29 @@ +[network-partition-key.html] + expected: TIMEOUT + [Iframes] + expected: FAIL + + [CSP sandbox] + expected: NOTRUN + + [Workers] + expected: TIMEOUT + + [Cross-site resources without credentials] + expected: FAIL + + [about:blank from opaque origin iframe] + expected: NOTRUN + + [Without credentials] + expected: FAIL + + [Workers with cross-site resources] + expected: NOTRUN + + [Cross-site resources with credentials] + expected: FAIL + + [With credentials] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini index 449b7d8c20f..116edd217dc 100644 --- a/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata-layout-2020/fetch/content-type/response.window.js.ini @@ -315,27 +315,24 @@ [<iframe>: combined response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: separate response Content-Type: text/html;" \\" text/plain] - expected: FAIL - - [<iframe>: combined response Content-Type: text/html;" \\" text/plain] + [<iframe>: separate response Content-Type: text/html */*;charset=gbk] expected: FAIL - [<iframe>: combined response Content-Type: text/html */*] + [<iframe>: separate response Content-Type: text/plain */*] expected: FAIL - [<iframe>: separate response Content-Type: text/html */*;charset=gbk] + [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*] + [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html] expected: FAIL - [<iframe>: separate response Content-Type: text/html;x=" text/plain] + [<iframe>: separate response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: combined response Content-Type: text/html;x=" text/plain] + [<iframe>: separate response Content-Type: text/html */*] expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] + [<iframe>: combined response Content-Type: text/html */*;charset=gbk] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini index 5c001592859..d2df9b78483 100644 --- a/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini +++ b/tests/wpt/metadata-layout-2020/fetch/content-type/script.window.js.ini @@ -56,6 +56,3 @@ [separate text/javascript x/x] expected: FAIL - [separate text/javascript;charset=windows-1252 error text/javascript] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini index aa6eb8f6085..58de838d890 100644 --- a/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata-layout-2020/fetch/nosniff/parsing-nosniff.window.js.ini @@ -11,6 +11,6 @@ [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] expected: FAIL - [X-Content-Type-Options%3A%20'NosniFF'] + [X-Content-Type-Options%3A%20%22nosniFF%22] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini new file mode 100644 index 00000000000..87b07c3e670 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini @@ -0,0 +1,4 @@ +[traverse_the_history_1.html] + [Multiple history traversals from the same task] + expected: FAIL + diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini index dc2e45516de..385376c7321 100644 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini +++ b/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini @@ -1,4 +1,4 @@ -[traverse_the_history_5.html] +[traverse_the_history_4.html] [Multiple history traversals, last would be aborted] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini index 48dca82e3c0..5846438f1ec 100644 --- a/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini +++ b/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini @@ -11,9 +11,6 @@ [Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_DisplayP3_opaque.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_transparent.png vs 2x2_16bit_sRGB_transparent.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_interlaced_DisplayP3_transparent.png] expected: FAIL @@ -29,12 +26,6 @@ [Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_DisplayP3_transparent.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_interlaced_DisplayP3_opaque.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_opaque.png vs 2x2_16bit_ProPhoto_opaque.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_Rec2020_transparent.png] expected: FAIL @@ -44,9 +35,6 @@ [Canvas color params: srgb, uint8. Testing 2x2_8bit_AdobeRGB_opaque.png vs 2x2_16bit_interlaced_AdobeRGB_opaque.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_transparent.png vs 2x2_16bit_interlaced_ProPhoto_transparent.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_interlaced_Rec2020_transparent.png] expected: FAIL @@ -59,45 +47,18 @@ [Canvas color params: srgb, float16. Testing 2x2_8bit_AdobeRGB_transparent.png vs 2x2_16bit_interlaced_AdobeRGB_transparent.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_opaque.png vs 2x2_16bit_interlaced_sRGB_opaque.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_interlaced_DisplayP3_transparent.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_opaque.png vs 2x2_16bit_sRGB_opaque.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_AdobeRGB_opaque.png vs 2x2_16bit_interlaced_AdobeRGB_opaque.png] expected: FAIL [Canvas color params: srgb, uint8. Testing 2x2_8bit_AdobeRGB_transparent.png vs 2x2_16bit_AdobeRGB_transparent.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_opaque.png vs 2x2_16bit_interlaced_Rec2020_opaque.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_Rec2020_opaque.png vs 2x2_16bit_interlaced_Rec2020_opaque.png] expected: FAIL [Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_interlaced_DisplayP3_opaque.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_interlaced_Rec2020_transparent.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_transparent.png vs 2x2_16bit_ProPhoto_transparent.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_DisplayP3_opaque.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_Rec2020_transparent.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_DisplayP3_transparent.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_sRGB_transparent.png vs 2x2_16bit_sRGB_transparent.png] expected: FAIL @@ -107,15 +68,6 @@ [Canvas color params: srgb, float16. Testing 2x2_8bit_AdobeRGB_opaque.png vs 2x2_16bit_AdobeRGB_opaque.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_opaque.png vs 2x2_16bit_Rec2020_opaque.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_opaque.png vs 2x2_16bit_interlaced_ProPhoto_opaque.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_transparent.png vs 2x2_16bit_interlaced_sRGB_transparent.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_sRGB_opaque.png vs 2x2_16bit_interlaced_sRGB_opaque.png] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini b/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini index 73457f22f71..2e0bfb43459 100644 --- a/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini +++ b/tests/wpt/metadata-layout-2020/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini @@ -1,2 +1,67 @@ [imageData-colorManagedBehavior.html] - expected: ERROR + [Test createImageData(width, height, imageDataColorSettings): SRGB canvas, e-SRGB F32 ImageData] + expected: FAIL + + [Test putImageData(imagedata, dx, dy): e-SRGB canvas, SRGB U8 ImageData] + expected: FAIL + + [Test cretateImageData(width, height) from SRGB canvas ] + expected: FAIL + + [Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB F32 ImageData] + expected: FAIL + + [Test createImageData(width, height, imageDataColorSettings): SRGB canvas, e-SRGB U16 ImageData] + expected: FAIL + + [Test getImageData(sx, sy, sw, sh) from SRGB canvas ] + expected: FAIL + + [Test createImageData(imagedata): e-SRGB canvas, SRGB U8 ImageData] + expected: FAIL + + [Test putImageData(imagedata, dx, dy): SRGB canvas, SRGB U8 ImageData] + expected: FAIL + + [Test createImageData(width, height, imageDataColorSettings): e-SRGB canvas, SRGB U8 ImageData] + expected: FAIL + + [Test createImageData(width, height, imageDataColorSettings): e-SRGB canvas, e-SRGB F32 ImageData] + expected: FAIL + + [Test createImageData(imagedata): SRGB canvas, e-SRGB F32 ImageData] + expected: FAIL + + [Test createImageData(imagedata): e-SRGB canvas, e-SRGB F32 ImageData] + expected: FAIL + + [Test cretateImageData(width, height) from e-SRGB canvas ] + expected: FAIL + + [Test createImageData(imagedata): e-SRGB canvas, e-SRGB U16 ImageData] + expected: FAIL + + [Test putImageData(imagedata, dx, dy): e-SRGB canvas, e-SRGB F32 ImageData] + expected: FAIL + + [Test createImageData(imagedata): SRGB canvas, SRGB U8 ImageData] + expected: FAIL + + [Test getImageData(sx, sy, sw, sh) from e-SRGB canvas ] + expected: FAIL + + [Test createImageData(imagedata): SRGB canvas, e-SRGB U16 ImageData] + expected: FAIL + + [Test createImageData(width, height, imageDataColorSettings): e-SRGB canvas, e-SRGB U16 ImageData] + expected: FAIL + + [Test createImageData(width, height, imageDataColorSettings): SRGB canvas, SRGB U8 ImageData] + expected: FAIL + + [Test putImageData(imagedata, dx, dy): e-SRGB canvas, e-SRGB U16 ImageData] + expected: FAIL + + [Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB U16 ImageData] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini index 88f4ddd0e9a..42ebcc9d57e 100644 --- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini +++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini @@ -1,5 +1,5 @@ [iframe_sandbox_popups_escaping-1.html] - expected: CRASH + expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] expected: TIMEOUT diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini index 93673c2a0db..295031c1812 100644 --- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini +++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini @@ -1,5 +1,5 @@ [iframe_sandbox_popups_escaping-3.html] - expected: CRASH + 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-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini index 3080be9afc0..d913fcbb129 100644 --- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini +++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini @@ -1,5 +1,5 @@ [iframe_sandbox_popups_nonescaping-1.html] - expected: CRASH + expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] expected: NOTRUN diff --git a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini index f4f994c5d6f..7a36937927c 100644 --- a/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini +++ b/tests/wpt/metadata-layout-2020/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini @@ -1,5 +1,4 @@ [iframe_sandbox_popups_nonescaping-3.html] - expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini deleted file mode 100644 index 633a99517d3..00000000000 --- a/tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[form-double-submit-2.html] - [preventDefault should allow onclick submit() to succeed] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini deleted file mode 100644 index 9f416703229..00000000000 --- a/tests/wpt/metadata-layout-2020/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[form-double-submit-3.html] - [<button> should have the same double-submit protection as <input type=submit>] - expected: FAIL - diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini new file mode 100644 index 00000000000..337c20f9cde --- /dev/null +++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini @@ -0,0 +1,2 @@ +[evaluation-order-1-nothrow-sharedworker.html] + expected: ERROR diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini new file mode 100644 index 00000000000..4728e2299c9 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini @@ -0,0 +1,2 @@ +[evaluation-order-1-sharedworker.html] + expected: ERROR diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini new file mode 100644 index 00000000000..337c20f9cde --- /dev/null +++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini @@ -0,0 +1,2 @@ +[evaluation-order-1-nothrow-sharedworker.html] + expected: ERROR diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini new file mode 100644 index 00000000000..4728e2299c9 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini @@ -0,0 +1,2 @@ +[evaluation-order-1-sharedworker.html] + expected: ERROR diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini new file mode 100644 index 00000000000..3e36f3e5fb0 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini @@ -0,0 +1,2 @@ +[evaluation-order-2-import-sharedworker.html] + expected: ERROR diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini new file mode 100644 index 00000000000..f3fe0d0e3d4 --- /dev/null +++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini @@ -0,0 +1,2 @@ +[evaluation-order-3-dynamic-sharedworker.html] + expected: ERROR diff --git a/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini new file mode 100644 index 00000000000..5ac282bdcdb --- /dev/null +++ b/tests/wpt/metadata-layout-2020/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini @@ -0,0 +1,4 @@ +[evaluation-order-4-tla.html] + [Test evaluation order of modules] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini b/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini index 30d23c291f1..9a0b66aa722 100644 --- a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini +++ b/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini @@ -1,4 +1,5 @@ [module-tla-import.html] + expected: TIMEOUT [document.write in an imported module] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini b/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini deleted file mode 100644 index 8694e58234a..00000000000 --- a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[module-tla-promise.html] - expected: TIMEOUT - [document.write in an imported module] - expected: TIMEOUT - diff --git a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini b/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini deleted file mode 100644 index 8195569d430..00000000000 --- a/tests/wpt/metadata-layout-2020/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini +++ /dev/null @@ -1,5 +0,0 @@ -[reload.window.html] - expected: TIMEOUT - [Reloading a document.open()'d page should reload the URL of the entry realm's responsible document] - expected: TIMEOUT - diff --git a/tests/wpt/metadata-layout-2020/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini b/tests/wpt/metadata-layout-2020/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini index 450c88bd32b..5602ea31dbe 100644 --- a/tests/wpt/metadata-layout-2020/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini +++ b/tests/wpt/metadata-layout-2020/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini @@ -4,5 +4,5 @@ expected: TIMEOUT [The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini index a56bad443a2..66bd350083b 100644 --- a/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini +++ b/tests/wpt/metadata-layout-2020/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini @@ -1,5 +1,4 @@ [realtimeanalyser-fft-scaling.html] - expected: TIMEOUT [X 2048-point FFT peak position is not equal to 64. Got 0.] expected: FAIL diff --git a/tests/wpt/metadata-layout-2020/webmessaging/without-ports/017.html.ini b/tests/wpt/metadata-layout-2020/webmessaging/without-ports/017.html.ini deleted file mode 100644 index 064cf47545b..00000000000 --- a/tests/wpt/metadata-layout-2020/webmessaging/without-ports/017.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[017.html] - expected: TIMEOUT - [origin of the script that invoked the method, about:blank] - expected: TIMEOUT - diff --git a/tests/wpt/metadata-layout-2020/webmessaging/without-ports/018.html.ini b/tests/wpt/metadata-layout-2020/webmessaging/without-ports/018.html.ini deleted file mode 100644 index 663a1f8fa30..00000000000 --- a/tests/wpt/metadata-layout-2020/webmessaging/without-ports/018.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[018.html] - expected: TIMEOUT - [origin of the script that invoked the method, javascript:] - expected: TIMEOUT - diff --git a/tests/wpt/metadata-layout-2020/workers/WorkerGlobalScope-close.html.ini b/tests/wpt/metadata-layout-2020/workers/WorkerGlobalScope-close.html.ini new file mode 100644 index 00000000000..fe8654e447c --- /dev/null +++ b/tests/wpt/metadata-layout-2020/workers/WorkerGlobalScope-close.html.ini @@ -0,0 +1,4 @@ +[WorkerGlobalScope-close.html] + [Test sending a message after closing.] + expected: FAIL + diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 9e0ccc96ae1..2a3840c2bb6 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -591,7 +591,7 @@ "manual": { "wide-gamut-canvas": { "imagedata-no-color-settings-crash.html": [ - "d7fe956e4b8d99421181a714648eaf561dbab735", + "b21eaf72abec2fc9da5d9a48c9ef483a143ec830", [ null, {} @@ -860,6 +860,24 @@ ] } }, + "mathml": { + "crashtests": { + "display-and-column-properties.html": [ + "c40a2a05497642d076962315b6b90cc3f5987360", + [ + null, + {} + ] + ], + "multicol-on-token-elements.html": [ + "9fc00eb6911b625a7443a3e1ec65ada7daf25105", + [ + null, + {} + ] + ] + } + }, "portals": { "portals-no-frame-crash.html": [ "c87afa38c29bf98344c9d01039ed6bf9af1d5d96", @@ -156131,6 +156149,19 @@ {} ] ], + "balance-grid-container.html": [ + "64df23e09fb62c6e71aa834c96b72d4bf2330f06", + [ + null, + [ + [ + "/css/css-multicol/balance-grid-container-ref.html", + "==" + ] + ], + {} + ] + ], "change-intrinsic-width.html": [ "3df3e1ebc8f9b5780dc858a878bca13dbedcdb35", [ @@ -158172,6 +158203,19 @@ {} ] ], + "multicol-span-all-012.html": [ + "7f1f9ae1ac41b1760f03056f7998746082f87e2e", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "multicol-span-all-block-sibling-003.xht": [ "abaa45f0a85023f3f07a9db483629b74d2b09d71", [ @@ -169683,6 +169727,32 @@ {} ] ], + "abspos-012.tentative.html": [ + "537f8778f912909687c0e2b19938166e285c2592", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], + "abspos-013.tentative.html": [ + "16c3417b48fce9b8d6e648416b666b8af5d0b73d", + [ + null, + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "auto-margins-001.tentative.html": [ "9e89ab6ca7f5220ea030aa537bcb3b64f156043d", [ @@ -190215,6 +190285,32 @@ {} ] ], + "scrolalble-hidden-3d-transform-z.html": [ + "5d539f63cfe4c78ada7b4f133e4e7477e0584c7e", + [ + null, + [ + [ + "/css/css-transforms/scrolalble-hidden-3d-transform-z-ref.html", + "==" + ] + ], + {} + ] + ], + "scrolalble-scroll-3d-transform-z.html": [ + "fd273fdf109e0d5ea06c0a2445265170a96d5d4e", + [ + null, + [ + [ + "/css/css-transforms/scrolalble-scroll-3d-transform-z-ref.html", + "==" + ] + ], + {} + ] + ], "size-change-under-backface-visibility-hidden.html": [ "1543eeb3da3e0efb58239097fe486f1ca85d7c63", [ @@ -239267,6 +239363,19 @@ ] }, "images": { + "blocked-by-csp.html": [ + "2416e5dfd089baba6716b4f2393e3dc86e242519", + [ + null, + [ + [ + "/html/rendering/replaced-elements/images/blocked-by-csp-ref.html", + "==" + ] + ], + {} + ] + ], "space.html": [ "fee115dfce6a0cf03069b6a24e8cb3149446a5ad", [ @@ -242805,6 +242914,45 @@ }, "relations": { "css-styling": { + "blur-filter.html": [ + "9540a017d2ef4c1967c78b05c9dbcc3331861610", + [ + null, + [ + [ + "/mathml/relations/css-styling/blur-filter-ref.html", + "==" + ] + ], + {} + ] + ], + "clip-path.html": [ + "5ff62ee7d4d098658c81a7502aed76d978d517f8", + [ + null, + [ + [ + "/mathml/relations/css-styling/clip-path-ref.html", + "==" + ] + ], + {} + ] + ], + "clip.html": [ + "633e20cb78af70daef5bf68ab9f13b6e7d564673", + [ + null, + [ + [ + "/mathml/relations/css-styling/clip-ref.html", + "==" + ] + ], + {} + ] + ], "color-001.html": [ "a80fade2de68d2b9fafdfa659a62ce32fca2174d", [ @@ -243418,6 +243566,19 @@ {} ] ], + "transform.html": [ + "b50d6c800458a97752e96388f94cbca622494fce", + [ + null, + [ + [ + "/mathml/relations/css-styling/transform-ref.html", + "==" + ] + ], + {} + ] + ], "visibility-001.html": [ "ece84ee693a524f24a33024c80e034035cac64bb", [ @@ -273124,15 +273285,15 @@ [] ], "domain": { - "domain-attribute-host-with-and-without-leading-period.sub.html.sub.headers": [ + "domain-attribute-host-with-and-without-leading-period.sub.https.html.sub.headers": [ "77d3d8c0c447c99fa556ea58dee090fadf7ad31d", [] ], - "domain-attribute-host-with-leading-period.sub.html.sub.headers": [ + "domain-attribute-host-with-leading-period.sub.https.html.sub.headers": [ "7de4ae2e6a5093fce5cc4405c0f1b92bf5f0981a", [] ], - "domain-attribute-matches-host.sub.html.sub.headers": [ + "domain-attribute-matches-host.sub.https.html.sub.headers": [ "8a2329e8c2f7fdd09847ae8a51e543e4b9495c87", [] ], @@ -275133,7 +275294,7 @@ ], "support": { "README.md": [ - "cacd959d02629b3f665ee51eb65b8b5a4115a49c", + "f58d4cd0ce430ec61840b6d745a8cefe41643a88", [] ], "echoing-nester.html": [ @@ -275145,11 +275306,11 @@ [] ], "otpcredential-helper.js": [ - "d5a7eb8c4715f08031933391b953ac32b43443d1", + "3cf4510585d61c683e78140452ad8fe3fd9150fe", [] ], "otpcredential-iframe.html": [ - "37fe6e1cd891b3f1c4500a0c09b0f6d2c603bccf", + "83f25d573c8ecc967635bb9239a3d0c0c1544d37", [] ], "passwordcredential-get.html": [ @@ -306606,6 +306767,10 @@ "cc95000ec53ea8daef06251ad5a9f20c5b06a281", [] ], + "balance-grid-container-ref.html": [ + "aa0ea5595d067d1c8bfc21f604ff2d662bef155a", + [] + ], "column-balancing-paged-001-print-ref.html": [ "af1a86b1e73a49e488faaba1741aae9afe63f28f", [] @@ -314206,6 +314371,14 @@ "56fa3074a153df96d8d586592c7b66de45bf4155", [] ], + "scrolalble-hidden-3d-transform-z-ref.html": [ + "b2399db472f50e4d75097ed12e4e4ccafc1d0ba7", + [] + ], + "scrolalble-scroll-3d-transform-z-ref.html": [ + "b2399db472f50e4d75097ed12e4e4ccafc1d0ba7", + [] + ], "size-change-under-backface-visibility-hidden-ref.html": [ "e9362c35745416a4ca19a9ab0bf92dd69afb8634", [] @@ -328029,6 +328202,34 @@ } } }, + "connection-pool": { + "resources": { + "network-partition-checker.html": [ + "b058f611242bb8cce4571409ef30c8ea0d7ed22f", + [] + ], + "network-partition-iframe-checker.html": [ + "f76ed1844719c9f88b53e5f2d35f7a86d8663c3c", + [] + ], + "network-partition-key.js": [ + "bd66109380f21ef171cb90f6c7a1ddafd7dd9211", + [] + ], + "network-partition-key.py": [ + "44ddae7a75df21908310a66cff719755c52629bb", + [] + ], + "network-partition-worker-checker.html": [ + "e6b7ea7673fe798b2e5a737056007b5a25e3c792", + [] + ], + "network-partition-worker.js": [ + "1745edfacb130f5a0c177296fa6324acc45ab9f5", + [] + ] + } + }, "content-encoding": { "resources": { "bad-gzip-body.py": [ @@ -328474,6 +328675,74 @@ }, "focus": { "support": { + "activeelement-after-focusing-different-site-iframe-inner-contentwindow.html": [ + "bc78e6e0538c4dd22a3563f1b56bc755d468e767", + [] + ], + "activeelement-after-focusing-different-site-iframe-inner.html": [ + "bc78e6e0538c4dd22a3563f1b56bc755d468e767", + [] + ], + "activeelement-after-focusing-different-site-iframe-outer-contentwindow.sub.html": [ + "fd66cbaa55c2044922af9d232ca2276ddf5b3028", + [] + ], + "activeelement-after-focusing-different-site-iframe-outer.sub.html": [ + "bcbedb2f74ede95ea65deea84f71c7b21f3ed640", + [] + ], + "activeelement-after-focusing-same-site-iframe-inner-contentwindow.html": [ + "bc78e6e0538c4dd22a3563f1b56bc755d468e767", + [] + ], + "activeelement-after-focusing-same-site-iframe-inner.html": [ + "bc78e6e0538c4dd22a3563f1b56bc755d468e767", + [] + ], + "activeelement-after-focusing-same-site-iframe-outer-contentwindow.html": [ + "63e2ac601967753b684324f84514521db085846f", + [] + ], + "activeelement-after-focusing-same-site-iframe-outer.html": [ + "333b436ea1190945d95c08a17235563aec47a4a9", + [] + ], + "activeelement-after-immediately-focusing-different-site-iframe-inner-contentwindow.html": [ + "bc78e6e0538c4dd22a3563f1b56bc755d468e767", + [] + ], + "activeelement-after-immediately-focusing-different-site-iframe-inner.html": [ + "bc78e6e0538c4dd22a3563f1b56bc755d468e767", + [] + ], + "activeelement-after-immediately-focusing-different-site-iframe-outer-contentwindow.sub.html": [ + "10240504fe976ddeebd0d3461c6293f8b5f20f11", + [] + ], + "activeelement-after-immediately-focusing-different-site-iframe-outer.sub.html": [ + "3485f1b8e4b7b3d2c57823b31c07561b2fde4723", + [] + ], + "activeelement-after-immediately-focusing-same-site-iframe-inner-contentwindow.html": [ + "bc78e6e0538c4dd22a3563f1b56bc755d468e767", + [] + ], + "activeelement-after-immediately-focusing-same-site-iframe-inner.html": [ + "bc78e6e0538c4dd22a3563f1b56bc755d468e767", + [] + ], + "activeelement-after-immediately-focusing-same-site-iframe-outer-contentwindow.html": [ + "3849f6ea2cc8d46c6576f7e8f56ce7eb3263dd15", + [] + ], + "activeelement-after-immediately-focusing-same-site-iframe-outer-contenwindow.html": [ + "bafc26065c8348840cdd3c4c16603bd68f3384ce", + [] + ], + "activeelement-after-immediately-focusing-same-site-iframe-outer.html": [ + "f22fa98076fde127961c9b58fc5f76db55b21a42", + [] + ], "focus-restoration-in-different-site-iframes-inner.html": [ "903b0c02858520dd1d3af7f95b82033fc5509585", [] @@ -328483,7 +328752,7 @@ [] ], "focus-restoration-in-different-site-iframes-outer.sub.html": [ - "91ffed1107580585831313347ebd04ed3dd75d8d", + "ecc1af286d9477d1ced8e38f890685c3ad043666", [] ] } @@ -332909,7 +333178,7 @@ }, "images": { "image.py": [ - "1aec081926317c158503e36a6ce073f51d6eb59a", + "b8bb34e61803b69edabfea3a9f9994f77bf77ef8", [] ] }, @@ -337556,6 +337825,10 @@ ] }, "images": { + "blocked-by-csp-ref.html": [ + "f37d8a3ec94834673a75749a28a42638f9c2a0db", + [] + ], "space-ref.html": [ "0cf272e16211098b6020d5d15d0d71336ba88a59", [] @@ -339432,6 +339705,14 @@ "c4449ca7c8a598e3712c8b24eb9e424775c19102", [] ], + "evaluation-order-1-nothrow-worker-setup.js": [ + "88fc22ba7f7e12881974010f3da28979bea31c65", + [] + ], + "evaluation-order-1-worker-setup.js": [ + "f5bb6ecaf96c981b99f44f131023904afb9f1326", + [] + ], "execution-timing": { "102.html": [ "439023833f4b020004a7258de35739630c9a2b3d", @@ -339887,6 +340168,14 @@ "8ccb58120664d2bb8e5cd76d22c10e8b431166ad", [] ], + "evaluation-order-4.1.mjs": [ + "f3347c1d28eac466c6d6ec67c60b9f1261b08b38", + [] + ], + "evaluation-order-4.2.mjs": [ + "96a5cca3a63b46d8cff21ad4f64cb8c9cccf699d", + [] + ], "evaluation-order-setup.mjs": [ "d3f22e9ee0f0bb00f1404c44469f8fd2c57b1bf3", [] @@ -340977,7 +341266,7 @@ [] ], "module-tla-promise-iframe.html": [ - "5c55bed6c07af592f14ad2372722d3388a5041a6", + "edc9e80cb394b2350be63aec018bc81a6c773144", [] ], "nested-document-write-1.html": [ @@ -342432,7 +342721,7 @@ [] ], "encoding.idl": [ - "bae48f11993e5f26545e5ada9ca8e34bdb7d0fe4", + "7585cb3717c9aa666aa84d6ade72de4626ec6d22", [] ], "encrypted-media.idl": [ @@ -342528,7 +342817,7 @@ [] ], "intersection-observer.idl": [ - "fa1de190387ec62a2c86aba97a0002f4db4537db", + "52db1c4baa9562f836f2273a4b21a4f970ff9318", [] ], "intervention-reporting.idl": [ @@ -342724,7 +343013,7 @@ [] ], "sanitizer-api.tentative.idl": [ - "25cba22ecfc4ee194cf4f21aa2c0d24c7c16de05", + "600ae0514a3094e19813476cd065162b9e0dfb4c", [] ], "savedata.idl": [ @@ -342776,7 +343065,7 @@ [] ], "streams.idl": [ - "1df6827189d137d8ce690073f6e626eb186bc539", + "99c3a5dee91f693d834b6dfc89cefec387d1078d", [] ], "text-detection-api.tentative.idl": [ @@ -342920,7 +343209,7 @@ [] ], "webxr-hand-input.idl": [ - "260c00365ac0d225e87eb01cd31f0bbd00eafd5c", + "a7eb3b1a0e8270782e4049d52c3c9ea9d9a722a4", [] ], "webxr.idl": [ @@ -343149,7 +343438,7 @@ ] }, "lint.ignore": [ - "a3b91f1a9925956b78238e5c81904cbbfeeff8ef", + "d299867133ca55ffcdf248631a39fafb79c8504b", [] ], "loading": { @@ -343483,6 +343772,18 @@ }, "relations": { "css-styling": { + "blur-filter-ref.html": [ + "21fc165b7da477a619933185c2f45df3c3e9ab09", + [] + ], + "clip-path-ref.html": [ + "57935564bf02a266189d65f6a7546c72a0497614", + [] + ], + "clip-ref.html": [ + "7882ac8c31e2d455d1afc8693b2c96913a3fdf0a", + [] + ], "color-001-ref.html": [ "0efca480eec5a3da684fe79a429982b139b202e4", [] @@ -343673,6 +343974,10 @@ "b8f5458b9bbd169104535f66528a26356cf1ef45", [] ], + "transform-ref.html": [ + "005e8a78828cb2457bfbb1908406d8b13812de5d", + [] + ], "visibility-001-ref.html": [ "fcaf5fe85b44129db71f82913374859380576369", [] @@ -343773,7 +344078,7 @@ [] ], "box-comparison.js": [ - "a574b01706b5fecc232d62735ef7e89938594769", + "b30ad279dfeba991a7e1f309b729d08e80638306", [] ], "box-navigation.js": [ @@ -344999,7 +345304,7 @@ [] ], "report.py": [ - "671b3a289212fe1663e3a9a8652ac8a1854ac888", + "65433e7840be56a05663b055518ca50ab5fd911f", [] ], "subdomains-pass.png": [ @@ -345754,6 +346059,10 @@ } }, "resources": { + "iframe-touch-action-none-subframe.html": [ + "bcfb5e06588e67205e3039103086bcd05fb48c9c", + [] + ], "pointerevent_attributes_hoverable_pointers-iframe.html": [ "5e55868282ce5ce549f1d32092839f05bd43aba7", [] @@ -348658,7 +348967,7 @@ ] }, "test-only-api.js": [ - "3fdf1cea6eb1374b7df7ede2e7dca27ceafd16b9", + "ef66e0e733f9c68004129d24b3c9ad12b9aa0708", [] ], "test-only-api.js.headers": [ @@ -348725,7 +349034,7 @@ ], "support": { "testcases.sub.js": [ - "d1af1c9b5a9fc5d057fd3fd14c48283ecfbb7337", + "a3cc6d38c8cd3d98a93a082fa4216a83de00d471", [] ] } @@ -352921,11 +353230,11 @@ [] ], "cacert.key": [ - "c36ebcbc91054d4d61036004883f9bfbf7d4f5ac", + "7b83e8f0e9ebe229c83335b3a2f0632540942ed2", [] ], "cacert.pem": [ - "f450f014d9f09b7f7c4e60f23a2f7cb779ab8188", + "a8ce54be5579b743001fa0de3c163129965d356c", [] ], "config.json": [ @@ -352933,11 +353242,11 @@ [] ], "web-platform.test.key": [ - "0d422053f76ba4df1e69df513fe916532c4ccfad", + "c4f5dc3f2cfba081e4536708c4667e7595e09d74", [] ], "web-platform.test.pem": [ - "e7b1b018466895f32356c24ae1f3da0fff2f1c4c", + "438f504b2b696757ea292e3c53ea0f0baa1fdd23", [] ] }, @@ -359861,7 +360170,7 @@ [] ], "chrome.py": [ - "880e2bd43eb6bbb4c9b8d052af77537ce3f27e3d", + "486070ad86d451e73f0e56ce720134024ffc1121", [] ], "chrome_android.py": [ @@ -359873,7 +360182,7 @@ [] ], "chrome_spki_certs.py": [ - "e8971e7acde3ed68bf5671e7e2f812765eb7c6c8", + "289453bd080959445ea5a452362b05a7675735e4", [] ], "edge.py": [ @@ -360073,12 +360382,12 @@ [] ], "chromium.py": [ - "0c2fc4081386a36922b9a8f7604fd21b2313aa35", + "cef01c4ffc5dd2df67ddfb6ed746d3ea4c5c4d76", [] ], "tests": { "test_chromium.py": [ - "59f39c1e71b200146063cbd6e5201405d8871646", + "8f8e732d4736337ccfecbb13f1fb8b590c9df52a", [] ] }, @@ -360654,7 +360963,7 @@ [] ], "request.py": [ - "28f407c806528c9574642794447605182a42f098", + "dbfe067ba7ff4b2f1c731f063e932143a0bb234f", [] ], "response.py": [ @@ -360670,7 +360979,7 @@ [] ], "server.py": [ - "56342ed287d8fa1028796e5083e1f1f99375217a", + "d6718df3f525d21ce848f75eb91d0741d857e5cb", [] ], "sslutils": { @@ -389868,21 +390177,21 @@ ] ], "domain": { - "domain-attribute-host-with-and-without-leading-period.sub.html": [ + "domain-attribute-host-with-and-without-leading-period.sub.https.html": [ "7273daa8499f6b37cc959b390cbab77d46665ffb", [ null, {} ] ], - "domain-attribute-host-with-leading-period.sub.html": [ + "domain-attribute-host-with-leading-period.sub.https.html": [ "5b295e7393fba696bfef438179de15c05a765def", [ null, {} ] ], - "domain-attribute-matches-host.sub.html": [ + "domain-attribute-matches-host.sub.https.html": [ "f790b49d98b91cc8db63ba440b635eb8e165cfac", [ null, @@ -390185,7 +390494,7 @@ } ] ], - "iframe.document.html": [ + "iframe.document.https.html": [ "2d276dbcaa9ce740ffdd8c8516defe18ab51de95", [ null, @@ -390597,7 +390906,7 @@ ] ], "otpcredential-get-basics.https.html": [ - "aca48227ce839afcc805c02b18e3d3dcde50f31e", + "edeb42a0f579209c1556d83c7fa98de08757f0dc", [ null, {} @@ -394383,6 +394692,13 @@ {} ] ], + "display-math-on-non-mathml-elements.html": [ + "2d117cfff575becd824ddefa2f98f6690913197f", + [ + null, + {} + ] + ], "display-with-float-dynamic.html": [ "7cc2fefcc42f4fc0aa7b72fabbf2fc8df6c38048", [ @@ -395440,6 +395756,104 @@ {} ] ], + "image-as-flexitem-size-001.html": [ + "6972d9cd9c48414a8d77b869ce7d9b633c73a2f3", + [ + null, + {} + ] + ], + "image-as-flexitem-size-001v.html": [ + "91231dc4f44759fe4122f5d280d01c5940adb7b2", + [ + null, + {} + ] + ], + "image-as-flexitem-size-002.html": [ + "4ae30b8afebc40f91fef4c7277ac8c13cfde4cfc", + [ + null, + {} + ] + ], + "image-as-flexitem-size-002v.html": [ + "6d0c0cafa77a9edb6a674d9952d82c0da7ec6035", + [ + null, + {} + ] + ], + "image-as-flexitem-size-003.html": [ + "03a9a6e3547ee9a4421d4624efd1371a237c8ad7", + [ + null, + {} + ] + ], + "image-as-flexitem-size-003v.html": [ + "fd728027e0cfb78162df586320bcb8cb284105a2", + [ + null, + {} + ] + ], + "image-as-flexitem-size-004.html": [ + "15e9f729271aecf945896a0af3263ee42415f0c3", + [ + null, + {} + ] + ], + "image-as-flexitem-size-004v.html": [ + "10e871a1c0eacf00a45aed2e594c14daa6b685e2", + [ + null, + {} + ] + ], + "image-as-flexitem-size-005.html": [ + "c4250956682999974cbc2da3c486f3c67acf66ef", + [ + null, + {} + ] + ], + "image-as-flexitem-size-005v.html": [ + "4acb8e259a962aea738178c4c3d36cbe58756831", + [ + null, + {} + ] + ], + "image-as-flexitem-size-006.html": [ + "e97305e70742d6de68f1230dfc06fb3eb0c0ac40", + [ + null, + {} + ] + ], + "image-as-flexitem-size-006v.html": [ + "4f42288737d985540256f07a9a9601da6efd4ec2", + [ + null, + {} + ] + ], + "image-as-flexitem-size-007.html": [ + "16728b8c7e42c078de20ea11eb0603064179cc2f", + [ + null, + {} + ] + ], + "image-as-flexitem-size-007v.html": [ + "c9fbcc3e98accea7756658b2d05feea04bba3f5c", + [ + null, + {} + ] + ], "inheritance.html": [ "aad25677739b7a101987edd9d1effc5c7d4a3098", [ @@ -401745,35 +402159,35 @@ ] ], "scrollbar-gutter-001.html": [ - "b8c157a1ecd1b4f806e64060cbbd2a993499cbf4", + "c6cdb55baad8b5e1deb5e89277c0bf2f5196a770", [ null, {} ] ], "scrollbar-gutter-002.html": [ - "5cfc45c358c540d4ca81d79aa199d2dcb0bfe494", + "8756ab7f0f810870676cbd6da6147d4b41235772", [ null, {} ] ], "scrollbar-gutter-003.html": [ - "17f724fb37c7a98241e12aad47b3365f9dccb33d", + "1002b462390c2e7bbe7ee2cd0a93be410717a3c7", [ null, {} ] ], "scrollbar-gutter-004.html": [ - "2f9ac9b7f330de181560d8aac5c3780682bc9780", + "b41e3491f278d8fc691aa4834b8408f3699836b7", [ null, {} ] ], "scrollbar-gutter-005.html": [ - "5f1e8413f3b93c0fe44f0e55b02f83cb37f192f2", + "dca465770ddb8d77aebf5be511c1c9325f9f7745", [ null, {} @@ -416692,8 +417106,15 @@ {} ] ], + "is-where-error-recovery.tentative.html": [ + "31f5b8ccc6cbb5bd180f59e53a42d726f32fe912", + [ + null, + {} + ] + ], "is-where-parsing.html": [ - "0f064bab73c4a46bd6c11aa456cf0bfd94cdaae8", + "33cb6ad726b8eef630d03ffbba243c066e004d3e", [ null, {} @@ -416706,6 +417127,78 @@ {} ] ], + "parsing": { + "attribute.html": [ + "a8fcfb24f5a9b1350adda6e59af814f1111325c1", + [ + null, + {} + ] + ], + "child.html": [ + "510c45db867e978fc54d3b66f705d18acbf2aff8", + [ + null, + {} + ] + ], + "class.html": [ + "00abcf838da18641d96c9381da77d38365329356", + [ + null, + {} + ] + ], + "descendant.html": [ + "5ff3a7bbfd973a88a30d1c804347403e1df57562", + [ + null, + {} + ] + ], + "id.html": [ + "2441c4217eb4b9ef1c8bde1aa5a96269b09b6304", + [ + null, + {} + ] + ], + "is.html": [ + "68236445c5f1e871cd4e0c500057b2ad11955b60", + [ + null, + {} + ] + ], + "not.html": [ + "3895683d1c84c1a39a38f2976f7b672a2b06e121", + [ + null, + {} + ] + ], + "sibling.html": [ + "4f7a7a3fbcc14d20282a7eee5ab4f9dd768467bb", + [ + null, + {} + ] + ], + "universal.html": [ + "e944a93f12c0eafc9c19a2e827d93eb4448984e0", + [ + null, + {} + ] + ], + "where.html": [ + "3a90969570925fd85df07508a76baa02dc1ec5b6", + [ + null, + {} + ] + ] + }, "pseudo-enabled-disabled.html": [ "521767de3763130f22e066c01d38fb7e83cb3de9", [ @@ -416936,6 +417429,13 @@ {} ] ], + "form-elements-namedItem.html": [ + "385d0f281d14a11ae86f8136433cb0ed088ad036", + [ + null, + {} + ] + ], "form-reset-callback.html": [ "8b8497f8b6c4268a0fcd10baeb39bda15a09ac0e", [ @@ -422755,7 +423255,7 @@ ] ], "idlharness.any.js": [ - "7a057f14e3a78c73b39a17f1debd3b8ad1e754d6", + "acd100c43b461c85399407087d20a51a57ce8352", [ "encoding/idlharness.any.html", { @@ -437959,6 +438459,17 @@ ] } }, + "connection-pool": { + "network-partition-key.html": [ + "60a784cd84ed92bbcd34aae050289a2676ed45bf", + [ + null, + { + "timeout": "long" + } + ] + ] + }, "content-encoding": { "bad-gzip-body.any.js": [ "f820322668c1cd79f1453cba918f1cf38bf8a1bb", @@ -439111,6 +439622,62 @@ } }, "focus": { + "activeelement-after-focusing-different-site-iframe-contentwindow.html": [ + "b16280acbd7a85abb183d6c23c7508f6ce2fe17f", + [ + null, + {} + ] + ], + "activeelement-after-focusing-different-site-iframe.html": [ + "b974252555aebad45c2be1855b5dfdedc0d38618", + [ + null, + {} + ] + ], + "activeelement-after-focusing-same-site-iframe-contentwindow.html": [ + "b4a14e721f8df6eab6a6a4ca3988a32718c673fa", + [ + null, + {} + ] + ], + "activeelement-after-focusing-same-site-iframe.html": [ + "55918ebf07f06a91074c1ea0e9b450626d698585", + [ + null, + {} + ] + ], + "activeelement-after-immediately-focusing-different-site-iframe-contentwindow.html": [ + "4cb3c68db63b907013f42ff4c1bad3af1e172345", + [ + null, + {} + ] + ], + "activeelement-after-immediately-focusing-different-site-iframe.html": [ + "67bf733bc1e63362bea444a2009da8fb9c0c6aa4", + [ + null, + {} + ] + ], + "activeelement-after-immediately-focusing-same-site-iframe-contentwindow.html": [ + "81dbfd28d038723f08f33af989162141cfd184bc", + [ + null, + {} + ] + ], + "activeelement-after-immediately-focusing-same-site-iframe.html": [ + "a035af072d3074ec960d63f12c678a6abafbf54f", + [ + null, + {} + ] + ], "focus-restoration-in-different-site-iframes.html": [ "3de05455651aef8e37e99aa33877c4e5905103ac", [ @@ -446166,7 +446733,7 @@ ] ], "canvas-colorManaged-convertToBlob-roundtrip.html": [ - "1fe8ac5eaebbe3e93387220d7a58f8ed8fdb1e29", + "efb2665a8a5a5b8f1997cd1a1a0128c2785c6b6a", [ null, {} @@ -446187,56 +446754,56 @@ ] ], "canvas-createImageBitmap-e_srgb.html": [ - "7483800b41e5ebafabcf1bfd204f5215edc1f158", + "72b8e278c600d38e431f7a73ff529386a4c0bbbc", [ null, {} ] ], "canvas-createPutGetImageData-colorManaged.html": [ - "f153a983d93d5ee33893fd23340dfcc5b26e098a", + "c72dc97cd0cfd1fa9dccbe7316ef20ff11441599", [ null, {} ] ], "canvas-draw-high-bit-depth-images.html": [ - "e7a83fc1f75711e107b45065a76eebf98eb04296", + "9907c4e2cf57a0229c7c871f5d7fecc697a3e5a3", [ null, {} ] ], "canvas-drawImage-e_srgb.html": [ - "7620d93d5f11ed9522aa851248e9981d742f7e6d", + "0cfa729a60b092e677028407e183914fa972e86f", [ null, {} ] ], "canvas-drawImage-offscreenCanvas.html": [ - "144dca0e7753c420a0a8eb4126c4c8e7cc8a39eb", + "7edbc5ee3c9f819d1f925942bebb50eec1681022", [ null, {} ] ], "canvas-getImageData-e_srgb.html": [ - "c38da7c95c0d48fd009c9073697f0232379918f9", + "73682eb631d064efae604138d038a572152d359b", [ null, {} ] ], "imageData-colorManagedBehavior.html": [ - "dda9f9cc28f051114f21b27fe470aafe1ce2b06e", + "d106904f2e236e2d44a76a7c95066abbf107342c", [ null, {} ] ], "transferFromImageBitmap.html": [ - "6855dc705b75aff9e609bc01be9ae94079a1ac0d", + "ff8abeb897f287568169e4555f7317d2b6f334e0", [ null, {} @@ -459858,7 +460425,7 @@ ] ], "reporting-navigation.https.html": [ - "680cc6af29a4b5f546179dfa7652a0ddf1fe687a", + "fe42015913b56d1ca0fdd234d4ad6ad9d0926af2", [ null, { @@ -459876,7 +460443,7 @@ ] ], "reporting-to-endpoint.https.html": [ - "02c719da7372555386e89cb159910bf13e3900ff", + "416732497bdd58f654cbfd883721352a8c7ecba7", [ null, { @@ -463406,6 +463973,15 @@ {} ] ], + "legend-hover.html": [ + "461917a9a0d2a379d5e32643db3a20fae672f1d4", + [ + null, + { + "testdriver": true + } + ] + ], "legend-margin-inline.html": [ "8daf78db999c8c437d311c8bb2f7b36f590ae277", [ @@ -470871,6 +471447,48 @@ {} ] ], + "evaluation-order-1-nothrow-sharedworker.html": [ + "9bfe5a1f312b69f5d11514a70ce43e42108677d8", + [ + null, + {} + ] + ], + "evaluation-order-1-nothrow-worker.html": [ + "4ddfb61d5078e9225d8aab3818a0842e9552d097", + [ + null, + {} + ] + ], + "evaluation-order-1-nothrow.html": [ + "b08372efd717aa55b6e5c3f9e79a56a1d39b2362", + [ + null, + {} + ] + ], + "evaluation-order-1-sharedworker.html": [ + "0ad18a8fba80ed1e15130b8ee5a52841ec672014", + [ + null, + {} + ] + ], + "evaluation-order-1-worker.html": [ + "7760e087c2dd229a9a74f69768d455930d540ae4", + [ + null, + {} + ] + ], + "evaluation-order-1.html": [ + "7bf7132081e32b955b38d4a115ebcd103cca6cea", + [ + null, + {} + ] + ], "execution-timing": { "001.html": [ "3f54f764f98dc5cff8274b91f56043b4d9170fdf", @@ -472248,21 +472866,21 @@ ] ], "choice-of-error-1.html": [ - "73a6ce3db005df26d3a2cb3134d5ae99ec5570db", + "50933da2c1d56c1427edaea838bcb477b05951ca", [ null, {} ] ], "choice-of-error-2.html": [ - "0d67cb819a9b376ce617cf1be495c0d559bfebe8", + "51adb09d11ada5391f93d931e990e9242afaa3ed", [ null, {} ] ], "choice-of-error-3.html": [ - "5c0adff6ea8200fa1c1c4d97590d6f01c725c9a8", + "bc52119bfe4877bb7c779218fcbf14baf35954dd", [ null, {} @@ -472490,21 +473108,21 @@ ] ], "error-type-1.html": [ - "6f119e30064712a180aa1f9a53b49e679e567ac4", + "2480a60d6d42a2f6e630c3c20a827621aeb3a256", [ null, {} ] ], "error-type-2.html": [ - "a7df1df0c866682b6cdf8a6f557ced8130a2b9df", + "673bf28ca2057b375b563b0b0eb53c553919157b", [ null, {} ] ], "error-type-3.html": [ - "9b00df38915abe7d19a1658af9fb545ca4769926", + "8a16266f4cdf700b381c9e7dc1c0dbc39eee8377", [ null, {} @@ -472545,6 +473163,13 @@ {} ] ], + "evaluation-order-1-nothrow-sharedworker.html": [ + "77ece9e49226b9d5daf6d0b2a189be1fbdab4013", + [ + null, + {} + ] + ], "evaluation-order-1-nothrow-worker.html": [ "1b7ea09ebdd8cb6c35aefefe6b22b6495db735c9", [ @@ -472559,6 +473184,13 @@ {} ] ], + "evaluation-order-1-sharedworker.html": [ + "cc7f0302bfce5dbf59b9a546fb369148ea75ff4e", + [ + null, + {} + ] + ], "evaluation-order-1-worker.html": [ "0325bb2a30da1e22f0a6e12e0dda17bf12c89f6c", [ @@ -472573,6 +473205,13 @@ {} ] ], + "evaluation-order-2-import-sharedworker.html": [ + "064563900216d543b3134401577dda4821027ebc", + [ + null, + {} + ] + ], "evaluation-order-2-import-worker.html": [ "83070191af9ad4b693e6ca3a1f2eaea53d8bad67", [ @@ -472587,6 +473226,13 @@ {} ] ], + "evaluation-order-3-dynamic-sharedworker.html": [ + "cd1f5edfa22d425fb8873adeb9493f399b2eda0f", + [ + null, + {} + ] + ], "evaluation-order-3-dynamic-worker.html": [ "49731bd4822d2abef8fd263bca98f2a2f398933c", [ @@ -472601,6 +473247,13 @@ {} ] ], + "evaluation-order-4-tla.html": [ + "da07faf42d611586a295bfa3e694f7bc29d070c0", + [ + null, + {} + ] + ], "execorder.html": [ "6a7513dc1361de0716584df8a5e7c8b3df2b69f3", [ @@ -476421,7 +477074,7 @@ ] ], "module-tla-delayed.html": [ - "f269dcbcb9399e0cd08306c529bcb2de97b5cdcc", + "e54bf5d5388d8fadacf5027d65cfec0a38510c27", [ null, {} @@ -476435,14 +477088,14 @@ ] ], "module-tla-import.html": [ - "f59c3c0abe705b968ebabef504cd3a6c56830338", + "20645f4d788ad713bf9d1be53f2f47533f6aba3b", [ null, {} ] ], "module-tla-promise.html": [ - "5fc30a8b0e74f496106f4e5b83439958c3118056", + "4f1281bcce4799fa792250989f571e3b1a7888d6", [ null, {} @@ -479037,20 +479690,22 @@ ] ], "input-events-get-target-ranges-backspace.tentative.html": [ - "11b1830efb9fa7680069fa0a3d28efa0b048a36d", + "7f56fe6660e85106b932666a086efccfe86109f7", [ null, { - "testdriver": true + "testdriver": true, + "timeout": "long" } ] ], "input-events-get-target-ranges-forwarddelete.tentative.html": [ - "b31afacb62dfca8b42734d098f9448086222ecc0", + "333a87a9d95bfda557aa37b67c32ae410f128d1c", [ null, { - "testdriver": true + "testdriver": true, + "timeout": "long" } ] ], @@ -480455,6 +481110,13 @@ {} ] ], + "move-distance-clamped.html": [ + "6c5f9597f9a884ca91edda4deef670ffee41cd34", + [ + null, + {} + ] + ], "move-transformed.html": [ "c9cdb9954b7002940559d8417e62afe69916428f", [ @@ -480607,6 +481269,13 @@ null, {} ] + ], + "visibility-hidden.html": [ + "ec1c3316380e4b3f836015c2ed69fcceff772c50", + [ + null, + {} + ] ] }, "lifecycle": { @@ -481559,6 +482228,13 @@ {} ] ], + "display-2.html": [ + "e0d41e4412f9644922bf8b2c628434a4e87c2003", + [ + null, + {} + ] + ], "display-contents.html": [ "aeaa28da908816ad39619d9a47bbb43a3116bbe9", [ @@ -491198,6 +491874,15 @@ } ] ], + "pointerevent_iframe-touch-action-none_touch.html": [ + "1c9651d8c162ff1ea71677f8fd3296c5c65fcad9", + [ + null, + { + "testdriver": true + } + ] + ], "pointerevent_lostpointercapture_for_disconnected_node.html": [ "b77d9e31e2cff90a92234ff5e43962be6a93dd6f", [ @@ -503887,21 +504572,21 @@ ] ], "sanitizer-config.tentative.html": [ - "c780bbe21b74fc96c491b29181a05decb3e5fea5", + "5c115a467cb64e1e93e9293692d122271d64df8a", [ null, {} ] ], "sanitizer-sanitize.tentative.html": [ - "219eff418918484a2b8f42062ea7bf8cb60dbad8", + "44961e02f4e8dcd876b250f2826cea4c7fe487ae", [ null, {} ] ], "sanitizer-sanitizeToString.tentative.html": [ - "98bb4a4601863d2ee50ef18333f88cfbe43e40fe", + "7efbc3ca7bd7d8c84595744d622dc4c92c87e347", [ null, {} @@ -504188,7 +504873,7 @@ ] ], "wakelock-onrelease.https.html": [ - "88c0cdb654c8e700195c430aa74fb2238ce9db10", + "524580cf370dbea3d10160f39dd2c63d4f3d4580", [ null, { @@ -507509,7 +508194,7 @@ ] ], "element-internals-shadowroot.tentative.html": [ - "0f01cc41acf153512ff00b1147ccc224087167eb", + "aeaa322a31c220d01a19c9a35c01f3537af9d4e6", [ null, {} @@ -524374,7 +525059,7 @@ ] ], "subresource-loading-from-web-bundle.tentative.html": [ - "1e0e78a320403e67d447a6df99ef819bd85c0106", + "574a25b681651affd6744c45370554a118befe16", [ null, {} @@ -528817,6 +529502,13 @@ {} ] ], + "RTCPeerConnection-addIceCandidate-connectionSetup.html": [ + "11fc4e4fa0c222df4e1469a5258295bf3703523c", + [ + null, + {} + ] + ], "RTCPeerConnection-addIceCandidate-timing.https.html": [ "9793844f56900927447f080ebbc92011d601fb9d", [ @@ -528825,7 +529517,7 @@ ] ], "RTCPeerConnection-addIceCandidate.html": [ - "c68e442a2d5094f22d508ec8b6804bc2a58d072f", + "5fcb6e864a8a223d5062b22b7a8f5e89fbf9d4cb", [ null, {} @@ -528938,6 +529630,13 @@ {} ] ], + "RTCPeerConnection-helper-test.html": [ + "42f6652ac4c4b2165d918929977888c55daddd56", + [ + null, + {} + ] + ], "RTCPeerConnection-iceConnectionState-disconnected.https.html": [ "af55a0c003512f98dc96d11c07e8a5099ed1f5ea", [ @@ -529072,7 +529771,7 @@ ] ], "RTCPeerConnection-setDescription-transceiver.html": [ - "a8056d473cd7ad3a3bdd348bc689aab756fab778", + "9bbab30d56e22f1f11846f8d2f6cf654631832f7", [ null, {} @@ -529366,7 +530065,7 @@ ] ], "RTCRtpTransceiver.https.html": [ - "412736b1d195d7977b7be974ef4eddd828da3e12", + "2e1dcbb0d9573a4a027b84113af8a6444ad9b1e2", [ null, { @@ -534018,7 +534717,7 @@ ] ], "set.window.js": [ - "1c20907939ad0b7b42987f9b2c573e4a17c10707", + "8e671d2dedd353793da72bdc9aebed269d0d9d4d", [ "webstorage/set.window.html", {} diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini new file mode 100644 index 00000000000..f64b45fea6b --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-002.html.ini @@ -0,0 +1,4 @@ +[hit-test-floats-002.html] + [Hit test float] + expected: FAIL + diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini deleted file mode 100644 index f29da48a2a0..00000000000 --- a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-003.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[hit-test-floats-003.html] - [Miss float below something else] - expected: FAIL - diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini deleted file mode 100644 index 4bfb0c2053a..00000000000 --- a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-004.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[hit-test-floats-004.html] - [Miss float below something else] - expected: FAIL - diff --git a/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini new file mode 100644 index 00000000000..baa9f1a7541 --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/floats/hit-test-floats-005.html.ini @@ -0,0 +1,4 @@ +[hit-test-floats-005.html] + [Miss clipped float] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001.html.ini new file mode 100644 index 00000000000..286b53b6e31 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001.html.ini @@ -0,0 +1,4 @@ +[image-as-flexitem-size-001.html] + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001v.html.ini new file mode 100644 index 00000000000..3684416f5b5 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-001v.html.ini @@ -0,0 +1,4 @@ +[image-as-flexitem-size-001v.html] + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002.html.ini new file mode 100644 index 00000000000..dbe4233a739 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002.html.ini @@ -0,0 +1,4 @@ +[image-as-flexitem-size-002.html] + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002v.html.ini new file mode 100644 index 00000000000..a0b5e69c4be --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-002v.html.ini @@ -0,0 +1,4 @@ +[image-as-flexitem-size-002v.html] + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003.html.ini new file mode 100644 index 00000000000..8fde903bd12 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003.html.ini @@ -0,0 +1,19 @@ +[image-as-flexitem-size-003.html] + [.flexbox > img 16] + expected: FAIL + + [.flexbox > img 11] + expected: FAIL + + [.flexbox > img 10] + expected: FAIL + + [.flexbox > img 13] + expected: FAIL + + [.flexbox > img 12] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003v.html.ini new file mode 100644 index 00000000000..0865c9cb19c --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-003v.html.ini @@ -0,0 +1,19 @@ +[image-as-flexitem-size-003v.html] + [.flexbox > img 16] + expected: FAIL + + [.flexbox > img 11] + expected: FAIL + + [.flexbox > img 10] + expected: FAIL + + [.flexbox > img 13] + expected: FAIL + + [.flexbox > img 12] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004.html.ini new file mode 100644 index 00000000000..da649930a95 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004.html.ini @@ -0,0 +1,34 @@ +[image-as-flexitem-size-004.html] + [.flexbox > img 15] + expected: FAIL + + [.flexbox > img 11] + expected: FAIL + + [.flexbox > img 10] + expected: FAIL + + [.flexbox > img 13] + expected: FAIL + + [.flexbox > img 8] + expected: FAIL + + [.flexbox > img 5] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + + [.flexbox > img 7] + expected: FAIL + + [.flexbox > img 6] + expected: FAIL + + [.flexbox > img 1] + expected: FAIL + + [.flexbox > img 3] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004v.html.ini new file mode 100644 index 00000000000..2a0b3330dc4 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-004v.html.ini @@ -0,0 +1,34 @@ +[image-as-flexitem-size-004v.html] + [.flexbox > img 15] + expected: FAIL + + [.flexbox > img 11] + expected: FAIL + + [.flexbox > img 10] + expected: FAIL + + [.flexbox > img 13] + expected: FAIL + + [.flexbox > img 8] + expected: FAIL + + [.flexbox > img 5] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + + [.flexbox > img 7] + expected: FAIL + + [.flexbox > img 6] + expected: FAIL + + [.flexbox > img 1] + expected: FAIL + + [.flexbox > img 3] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005.html.ini new file mode 100644 index 00000000000..ccc0bc2253a --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005.html.ini @@ -0,0 +1,43 @@ +[image-as-flexitem-size-005.html] + [.flexbox > img 15] + expected: FAIL + + [.flexbox > img 16] + expected: FAIL + + [.flexbox > img 11] + expected: FAIL + + [.flexbox > img 10] + expected: FAIL + + [.flexbox > img 13] + expected: FAIL + + [.flexbox > img 18] + expected: FAIL + + [.flexbox > img 8] + expected: FAIL + + [.flexbox > img 5] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + + [.flexbox > img 7] + expected: FAIL + + [.flexbox > img 6] + expected: FAIL + + [.flexbox > img 1] + expected: FAIL + + [.flexbox > img 3] + expected: FAIL + + [.flexbox > img 2] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005v.html.ini new file mode 100644 index 00000000000..3ae5a431843 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-005v.html.ini @@ -0,0 +1,43 @@ +[image-as-flexitem-size-005v.html] + [.flexbox > img 15] + expected: FAIL + + [.flexbox > img 16] + expected: FAIL + + [.flexbox > img 11] + expected: FAIL + + [.flexbox > img 10] + expected: FAIL + + [.flexbox > img 13] + expected: FAIL + + [.flexbox > img 18] + expected: FAIL + + [.flexbox > img 8] + expected: FAIL + + [.flexbox > img 5] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + + [.flexbox > img 7] + expected: FAIL + + [.flexbox > img 6] + expected: FAIL + + [.flexbox > img 1] + expected: FAIL + + [.flexbox > img 3] + expected: FAIL + + [.flexbox > img 2] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006.html.ini new file mode 100644 index 00000000000..3dc2eb00fc7 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006.html.ini @@ -0,0 +1,43 @@ +[image-as-flexitem-size-006.html] + [.flexbox > img 15] + expected: FAIL + + [.flexbox > img 14] + expected: FAIL + + [.flexbox > img 17] + expected: FAIL + + [.flexbox > img 12] + expected: FAIL + + [.flexbox > img 18] + expected: FAIL + + [.flexbox > img 9] + expected: FAIL + + [.flexbox > img 8] + expected: FAIL + + [.flexbox > img 5] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + + [.flexbox > img 7] + expected: FAIL + + [.flexbox > img 6] + expected: FAIL + + [.flexbox > img 1] + expected: FAIL + + [.flexbox > img 3] + expected: FAIL + + [.flexbox > img 2] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006v.html.ini new file mode 100644 index 00000000000..9eb2855ec46 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-006v.html.ini @@ -0,0 +1,43 @@ +[image-as-flexitem-size-006v.html] + [.flexbox > img 15] + expected: FAIL + + [.flexbox > img 14] + expected: FAIL + + [.flexbox > img 17] + expected: FAIL + + [.flexbox > img 12] + expected: FAIL + + [.flexbox > img 18] + expected: FAIL + + [.flexbox > img 9] + expected: FAIL + + [.flexbox > img 8] + expected: FAIL + + [.flexbox > img 5] + expected: FAIL + + [.flexbox > img 4] + expected: FAIL + + [.flexbox > img 7] + expected: FAIL + + [.flexbox > img 6] + expected: FAIL + + [.flexbox > img 1] + expected: FAIL + + [.flexbox > img 3] + expected: FAIL + + [.flexbox > img 2] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007.html.ini new file mode 100644 index 00000000000..495ce451b17 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007.html.ini @@ -0,0 +1,4 @@ +[image-as-flexitem-size-007.html] + [.flexbox > img 4] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007v.html.ini b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007v.html.ini new file mode 100644 index 00000000000..416bfb37196 --- /dev/null +++ b/tests/wpt/metadata/css/css-flexbox/image-as-flexitem-size-007v.html.ini @@ -0,0 +1,4 @@ +[image-as-flexitem-size-007v.html] + [.flexbox > img 4] + 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..4c79907309b --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/CaretPosition-001.html.ini @@ -0,0 +1,4 @@ +[CaretPosition-001.html] + [Element at (400, 100)] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini new file mode 100644 index 00000000000..e38782d8c85 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini @@ -0,0 +1,4 @@ +[elementFromPoint-001.html] + [CSSOM View - 5 - extensions to the Document interface] + 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 e181af5397f..00000000000 --- a/tests/wpt/metadata/css/cssom-view/elementsFromPoint-invalid-cases.html.ini +++ /dev/null @@ -1,4 +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/css/cssom-view/matchMedia-display-none-iframe.html.ini b/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini deleted file mode 100644 index e6e1f29e274..00000000000 --- a/tests/wpt/metadata/css/cssom-view/matchMedia-display-none-iframe.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[matchMedia-display-none-iframe.html] - expected: ERROR diff --git a/tests/wpt/metadata/css/selectors/is-where-error-recovery.tentative.html.ini b/tests/wpt/metadata/css/selectors/is-where-error-recovery.tentative.html.ini new file mode 100644 index 00000000000..fb4b13050d0 --- /dev/null +++ b/tests/wpt/metadata/css/selectors/is-where-error-recovery.tentative.html.ini @@ -0,0 +1,4 @@ +[is-where-error-recovery.tentative.html] + [CSS Selectors: :is() and :where() error recovery] + expected: FAIL + diff --git a/tests/wpt/metadata/css/selectors/parsing/is.html.ini b/tests/wpt/metadata/css/selectors/parsing/is.html.ini new file mode 100644 index 00000000000..941fc56bf74 --- /dev/null +++ b/tests/wpt/metadata/css/selectors/parsing/is.html.ini @@ -0,0 +1,19 @@ +[is.html] + [":is(#a)" should be a valid selector] + expected: FAIL + + [".a.b ~ :is(.c.d ~ .e.f)" should be a valid selector] + expected: FAIL + + [".a.b ~ .c.d:is(span.e + .f, .g.h > .i.j .k)" should be a valid selector] + expected: FAIL + + [":is(:hover,:focus)" should be a valid selector] + expected: FAIL + + ["a:is(:not(:hover))" should be a valid selector] + expected: FAIL + + [":is(ul,ol,.list) > [hidden\]" should be a valid selector] + expected: FAIL + diff --git a/tests/wpt/metadata/css/selectors/parsing/where.html.ini b/tests/wpt/metadata/css/selectors/parsing/where.html.ini new file mode 100644 index 00000000000..188d18b9618 --- /dev/null +++ b/tests/wpt/metadata/css/selectors/parsing/where.html.ini @@ -0,0 +1,19 @@ +[where.html] + [":where(#a)" should be a valid selector] + expected: FAIL + + [":where(:hover,:focus)" should be a valid selector] + expected: FAIL + + [".a.b ~ .c.d:where(span.e + .f, .g.h > .i.j .k)" should be a valid selector] + expected: FAIL + + [":where(ul,ol,.list) > [hidden\]" should be a valid selector] + expected: FAIL + + ["a:where(:not(:hover))" should be a valid selector] + expected: FAIL + + [".a.b ~ :where(.c.d ~ .e.f)" should be a valid selector] + expected: FAIL + diff --git a/tests/wpt/metadata/custom-elements/form-associated/form-elements-namedItem.html.ini b/tests/wpt/metadata/custom-elements/form-associated/form-elements-namedItem.html.ini new file mode 100644 index 00000000000..68ebf17de8b --- /dev/null +++ b/tests/wpt/metadata/custom-elements/form-associated/form-elements-namedItem.html.ini @@ -0,0 +1,4 @@ +[form-elements-namedItem.html] + [Form associated custom elements should work with document.forms.elements.namedItem()] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/connection-pool/network-partition-key.html.ini b/tests/wpt/metadata/fetch/connection-pool/network-partition-key.html.ini new file mode 100644 index 00000000000..890d1fb5747 --- /dev/null +++ b/tests/wpt/metadata/fetch/connection-pool/network-partition-key.html.ini @@ -0,0 +1,29 @@ +[network-partition-key.html] + expected: TIMEOUT + [Iframes] + expected: FAIL + + [CSP sandbox] + expected: NOTRUN + + [Workers] + expected: TIMEOUT + + [Cross-site resources without credentials] + expected: FAIL + + [about:blank from opaque origin iframe] + expected: NOTRUN + + [Without credentials] + expected: FAIL + + [Workers with cross-site resources] + expected: NOTRUN + + [Cross-site resources with credentials] + expected: FAIL + + [With credentials] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini index a0c94677fca..7707b85c1eb 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -315,27 +315,24 @@ [<iframe>: combined response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: separate response Content-Type: text/html;" \\" text/plain] - expected: FAIL - - [<iframe>: combined response Content-Type: text/html;" \\" text/plain] + [<iframe>: separate response Content-Type: text/html */*;charset=gbk] expected: FAIL - [<iframe>: combined response Content-Type: text/html */*] + [<iframe>: separate response Content-Type: text/plain */*] expected: FAIL - [<iframe>: separate response Content-Type: text/html */*;charset=gbk] + [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*] + [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html] expected: FAIL - [<iframe>: separate response Content-Type: text/html;x=" text/plain] + [<iframe>: separate response Content-Type: text/html;" text/plain] expected: FAIL - [<iframe>: combined response Content-Type: text/html;x=" text/plain] + [<iframe>: separate response Content-Type: text/html */*] expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] + [<iframe>: combined response Content-Type: text/html */*;charset=gbk] expected: FAIL diff --git a/tests/wpt/metadata/fetch/content-type/script.window.js.ini b/tests/wpt/metadata/fetch/content-type/script.window.js.ini index 5c001592859..d2df9b78483 100644 --- a/tests/wpt/metadata/fetch/content-type/script.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/script.window.js.ini @@ -56,6 +56,3 @@ [separate text/javascript x/x] expected: FAIL - [separate text/javascript;charset=windows-1252 error text/javascript] - expected: FAIL - diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini index aa6eb8f6085..58de838d890 100644 --- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini @@ -11,6 +11,6 @@ [X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!] expected: FAIL - [X-Content-Type-Options%3A%20'NosniFF'] + [X-Content-Type-Options%3A%20%22nosniFF%22] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini new file mode 100644 index 00000000000..87b07c3e670 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini @@ -0,0 +1,4 @@ +[traverse_the_history_1.html] + [Multiple history traversals from the same task] + expected: FAIL + diff --git a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini index dc2e45516de..385376c7321 100644 --- a/tests/wpt/metadata-layout-2020/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini @@ -1,4 +1,4 @@ -[traverse_the_history_5.html] +[traverse_the_history_4.html] [Multiple history traversals, last would be aborted] expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini b/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini index 48dca82e3c0..5846438f1ec 100644 --- a/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini +++ b/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html.ini @@ -11,9 +11,6 @@ [Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_DisplayP3_opaque.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_transparent.png vs 2x2_16bit_sRGB_transparent.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_interlaced_DisplayP3_transparent.png] expected: FAIL @@ -29,12 +26,6 @@ [Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_DisplayP3_transparent.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_interlaced_DisplayP3_opaque.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_opaque.png vs 2x2_16bit_ProPhoto_opaque.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_Rec2020_transparent.png] expected: FAIL @@ -44,9 +35,6 @@ [Canvas color params: srgb, uint8. Testing 2x2_8bit_AdobeRGB_opaque.png vs 2x2_16bit_interlaced_AdobeRGB_opaque.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_transparent.png vs 2x2_16bit_interlaced_ProPhoto_transparent.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_interlaced_Rec2020_transparent.png] expected: FAIL @@ -59,45 +47,18 @@ [Canvas color params: srgb, float16. Testing 2x2_8bit_AdobeRGB_transparent.png vs 2x2_16bit_interlaced_AdobeRGB_transparent.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_opaque.png vs 2x2_16bit_interlaced_sRGB_opaque.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_interlaced_DisplayP3_transparent.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_opaque.png vs 2x2_16bit_sRGB_opaque.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_AdobeRGB_opaque.png vs 2x2_16bit_interlaced_AdobeRGB_opaque.png] expected: FAIL [Canvas color params: srgb, uint8. Testing 2x2_8bit_AdobeRGB_transparent.png vs 2x2_16bit_AdobeRGB_transparent.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_opaque.png vs 2x2_16bit_interlaced_Rec2020_opaque.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_Rec2020_opaque.png vs 2x2_16bit_interlaced_Rec2020_opaque.png] expected: FAIL [Canvas color params: srgb, float16. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_interlaced_DisplayP3_opaque.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_interlaced_Rec2020_transparent.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_transparent.png vs 2x2_16bit_ProPhoto_transparent.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_opaque.png vs 2x2_16bit_DisplayP3_opaque.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_transparent.png vs 2x2_16bit_Rec2020_transparent.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_DisplayP3_transparent.png vs 2x2_16bit_DisplayP3_transparent.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_sRGB_transparent.png vs 2x2_16bit_sRGB_transparent.png] expected: FAIL @@ -107,15 +68,6 @@ [Canvas color params: srgb, float16. Testing 2x2_8bit_AdobeRGB_opaque.png vs 2x2_16bit_AdobeRGB_opaque.png] expected: FAIL - [Canvas color params: srgb, uint8. Testing 2x2_8bit_Rec2020_opaque.png vs 2x2_16bit_Rec2020_opaque.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_ProPhoto_opaque.png vs 2x2_16bit_interlaced_ProPhoto_opaque.png] - expected: FAIL - - [Canvas color params: srgb, uint8. Testing 2x2_8bit_sRGB_transparent.png vs 2x2_16bit_interlaced_sRGB_transparent.png] - expected: FAIL - [Canvas color params: srgb, float16. Testing 2x2_8bit_sRGB_opaque.png vs 2x2_16bit_interlaced_sRGB_opaque.png] expected: FAIL diff --git a/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini b/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini index 73457f22f71..2e0bfb43459 100644 --- a/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini +++ b/tests/wpt/metadata/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html.ini @@ -1,2 +1,67 @@ [imageData-colorManagedBehavior.html] - expected: ERROR + [Test createImageData(width, height, imageDataColorSettings): SRGB canvas, e-SRGB F32 ImageData] + expected: FAIL + + [Test putImageData(imagedata, dx, dy): e-SRGB canvas, SRGB U8 ImageData] + expected: FAIL + + [Test cretateImageData(width, height) from SRGB canvas ] + expected: FAIL + + [Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB F32 ImageData] + expected: FAIL + + [Test createImageData(width, height, imageDataColorSettings): SRGB canvas, e-SRGB U16 ImageData] + expected: FAIL + + [Test getImageData(sx, sy, sw, sh) from SRGB canvas ] + expected: FAIL + + [Test createImageData(imagedata): e-SRGB canvas, SRGB U8 ImageData] + expected: FAIL + + [Test putImageData(imagedata, dx, dy): SRGB canvas, SRGB U8 ImageData] + expected: FAIL + + [Test createImageData(width, height, imageDataColorSettings): e-SRGB canvas, SRGB U8 ImageData] + expected: FAIL + + [Test createImageData(width, height, imageDataColorSettings): e-SRGB canvas, e-SRGB F32 ImageData] + expected: FAIL + + [Test createImageData(imagedata): SRGB canvas, e-SRGB F32 ImageData] + expected: FAIL + + [Test createImageData(imagedata): e-SRGB canvas, e-SRGB F32 ImageData] + expected: FAIL + + [Test cretateImageData(width, height) from e-SRGB canvas ] + expected: FAIL + + [Test createImageData(imagedata): e-SRGB canvas, e-SRGB U16 ImageData] + expected: FAIL + + [Test putImageData(imagedata, dx, dy): e-SRGB canvas, e-SRGB F32 ImageData] + expected: FAIL + + [Test createImageData(imagedata): SRGB canvas, SRGB U8 ImageData] + expected: FAIL + + [Test getImageData(sx, sy, sw, sh) from e-SRGB canvas ] + expected: FAIL + + [Test createImageData(imagedata): SRGB canvas, e-SRGB U16 ImageData] + expected: FAIL + + [Test createImageData(width, height, imageDataColorSettings): e-SRGB canvas, e-SRGB U16 ImageData] + expected: FAIL + + [Test createImageData(width, height, imageDataColorSettings): SRGB canvas, SRGB U8 ImageData] + expected: FAIL + + [Test putImageData(imagedata, dx, dy): e-SRGB canvas, e-SRGB U16 ImageData] + expected: FAIL + + [Test putImageData(imagedata, dx, dy): SRGB canvas, e-SRGB U16 ImageData] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini index 2a166bb97b7..fc37df7e3fa 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html.ini @@ -1,6 +1,6 @@ [iframe_sandbox_popups_escaping-1.html] type: testharness - expected: CRASH + expected: TIMEOUT [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] expected: TIMEOUT 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 cb0211f1d21..5f60c78e73c 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,6 +1,6 @@ [iframe_sandbox_popups_escaping-3.html] type: testharness - expected: CRASH + 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-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini index 963d4cd20ef..9df1ac56f2a 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini @@ -1,6 +1,6 @@ [iframe_sandbox_popups_nonescaping-1.html] type: testharness - expected: CRASH + expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] expected: NOTRUN diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini index e440b1e38c6..dc856a3d5a3 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini @@ -1,6 +1,5 @@ [iframe_sandbox_popups_nonescaping-3.html] type: testharness - expected: TIMEOUT [Check that popups from a sandboxed iframe do not escape the sandbox] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini deleted file mode 100644 index 633a99517d3..00000000000 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-2.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[form-double-submit-2.html] - [preventDefault should allow onclick submit() to succeed] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini b/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini deleted file mode 100644 index 9f416703229..00000000000 --- a/tests/wpt/metadata/html/semantics/forms/form-submission-0/form-double-submit-3.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[form-double-submit-3.html] - [<button> should have the same double-submit protection as <input type=submit>] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini new file mode 100644 index 00000000000..337c20f9cde --- /dev/null +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html.ini @@ -0,0 +1,2 @@ +[evaluation-order-1-nothrow-sharedworker.html] + expected: ERROR diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini new file mode 100644 index 00000000000..4728e2299c9 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html.ini @@ -0,0 +1,2 @@ +[evaluation-order-1-sharedworker.html] + expected: ERROR diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini new file mode 100644 index 00000000000..337c20f9cde --- /dev/null +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html.ini @@ -0,0 +1,2 @@ +[evaluation-order-1-nothrow-sharedworker.html] + expected: ERROR diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini new file mode 100644 index 00000000000..4728e2299c9 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html.ini @@ -0,0 +1,2 @@ +[evaluation-order-1-sharedworker.html] + expected: ERROR diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini new file mode 100644 index 00000000000..3e36f3e5fb0 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html.ini @@ -0,0 +1,2 @@ +[evaluation-order-2-import-sharedworker.html] + expected: ERROR diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini new file mode 100644 index 00000000000..f3fe0d0e3d4 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html.ini @@ -0,0 +1,2 @@ +[evaluation-order-3-dynamic-sharedworker.html] + expected: ERROR diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini new file mode 100644 index 00000000000..5ac282bdcdb --- /dev/null +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html.ini @@ -0,0 +1,4 @@ +[evaluation-order-4-tla.html] + [Test evaluation order of modules] + expected: FAIL + diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini index 30d23c291f1..9a0b66aa722 100644 --- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini +++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html.ini @@ -1,4 +1,5 @@ [module-tla-import.html] + expected: TIMEOUT [document.write in an imported module] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini deleted file mode 100644 index 8694e58234a..00000000000 --- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[module-tla-promise.html] - expected: TIMEOUT - [document.write in an imported module] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini deleted file mode 100644 index 8195569d430..00000000000 --- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js.ini +++ /dev/null @@ -1,5 +0,0 @@ -[reload.window.html] - expected: TIMEOUT - [Reloading a document.open()'d page should reload the URL of the entry realm's responsible document] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini b/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini index 01f7b72cbe7..edae5e5adcd 100644 --- a/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini +++ b/tests/wpt/metadata/html/webappapis/scripting/events/compile-event-handler-settings-objects.html.ini @@ -5,5 +5,5 @@ expected: TIMEOUT [The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document] - expected: FAIL + expected: TIMEOUT diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini index a56bad443a2..66bd350083b 100644 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini +++ b/tests/wpt/metadata/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-scaling.html.ini @@ -1,5 +1,4 @@ [realtimeanalyser-fft-scaling.html] - expected: TIMEOUT [X 2048-point FFT peak position is not equal to 64. Got 0.] expected: FAIL diff --git a/tests/wpt/metadata/webmessaging/without-ports/017.html.ini b/tests/wpt/metadata/webmessaging/without-ports/017.html.ini deleted file mode 100644 index 064cf47545b..00000000000 --- a/tests/wpt/metadata/webmessaging/without-ports/017.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[017.html] - expected: TIMEOUT - [origin of the script that invoked the method, about:blank] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/webmessaging/without-ports/018.html.ini b/tests/wpt/metadata/webmessaging/without-ports/018.html.ini deleted file mode 100644 index 663a1f8fa30..00000000000 --- a/tests/wpt/metadata/webmessaging/without-ports/018.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[018.html] - expected: TIMEOUT - [origin of the script that invoked the method, javascript:] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini b/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini new file mode 100644 index 00000000000..fe8654e447c --- /dev/null +++ b/tests/wpt/metadata/workers/WorkerGlobalScope-close.html.ini @@ -0,0 +1,4 @@ +[WorkerGlobalScope-close.html] + [Test sending a message after closing.] + expected: FAIL + diff --git a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.html b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.https.html index 7273daa8499..7273daa8499 100644 --- a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.html +++ b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.https.html diff --git a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.html.sub.headers b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.https.html.sub.headers index 77d3d8c0c44..77d3d8c0c44 100644 --- a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.html.sub.headers +++ b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-and-without-leading-period.sub.https.html.sub.headers diff --git a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.html b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.https.html index 5b295e7393f..5b295e7393f 100644 --- a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.html +++ b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.https.html diff --git a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.html.sub.headers b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.https.html.sub.headers index 7de4ae2e6a5..7de4ae2e6a5 100644 --- a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.html.sub.headers +++ b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-host-with-leading-period.sub.https.html.sub.headers diff --git a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.html b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.https.html index f790b49d98b..f790b49d98b 100644 --- a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.html +++ b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.https.html diff --git a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.html.sub.headers b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.https.html.sub.headers index 8a2329e8c2f..8a2329e8c2f 100644 --- a/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.html.sub.headers +++ b/tests/wpt/web-platform-tests/cookies/domain/domain-attribute-matches-host.sub.https.html.sub.headers diff --git a/tests/wpt/web-platform-tests/cookies/samesite/iframe.document.html b/tests/wpt/web-platform-tests/cookies/samesite/iframe.document.https.html index 2d276dbcaa9..2d276dbcaa9 100644 --- a/tests/wpt/web-platform-tests/cookies/samesite/iframe.document.html +++ b/tests/wpt/web-platform-tests/cookies/samesite/iframe.document.https.html diff --git a/tests/wpt/web-platform-tests/credential-management/otpcredential-get-basics.https.html b/tests/wpt/web-platform-tests/credential-management/otpcredential-get-basics.https.html index aca48227ce8..edeb42a0f57 100644 --- a/tests/wpt/web-platform-tests/credential-management/otpcredential-get-basics.https.html +++ b/tests/wpt/web-platform-tests/credential-management/otpcredential-get-basics.https.html @@ -3,7 +3,8 @@ <title>Tests OTPCredential</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> -<script src="./support/otpcredential-helper.js"></script> +<script src="/resources/test-only-api.js"></script> +<script src="support/otpcredential-helper.js"></script> <script> 'use strict'; diff --git a/tests/wpt/web-platform-tests/credential-management/support/README.md b/tests/wpt/web-platform-tests/credential-management/support/README.md index cacd959d026..f58d4cd0ce4 100644 --- a/tests/wpt/web-platform-tests/credential-management/support/README.md +++ b/tests/wpt/web-platform-tests/credential-management/support/README.md @@ -8,10 +8,13 @@ and the underlying operating system and mock its behavior. Usage: -1. Include `<script src="./support/otpcredential-helper.js"></script>` in your -test -2. Set expectations +1. Include the following in your test: +```html +<script src="/resources/test-only-api.js"></script> +<script src="support/otpcredential-helper.js"></script> ``` +2. Set expectations +```javascript await expect(receive).andReturn(() => { // mock behavior }) diff --git a/tests/wpt/web-platform-tests/credential-management/support/otpcredential-helper.js b/tests/wpt/web-platform-tests/credential-management/support/otpcredential-helper.js index d5a7eb8c471..3cf4510585d 100644 --- a/tests/wpt/web-platform-tests/credential-management/support/otpcredential-helper.js +++ b/tests/wpt/web-platform-tests/credential-management/support/otpcredential-helper.js @@ -8,45 +8,32 @@ // these tests the browser must be run with these options: // // --enable-blink-features=MojoJS,MojoJSTest -async function loadChromiumResources() { - if (!window.MojoInterfaceInterceptor) { - // Do nothing on non-Chromium-based browsers or when the Mojo bindings are - // not present in the global namespace. - return; - } +const Status = {}; +async function loadChromiumResources() { const resources = [ - '/gen/layout_test_data/mojo/public/js/mojo_bindings_lite.js', '/gen/mojo/public/mojom/base/time.mojom-lite.js', '/gen/third_party/blink/public/mojom/sms/sms_receiver.mojom-lite.js', - '/resources/chromium/mock-sms-receiver.js', ]; - await Promise.all(resources.map(path => { - const script = document.createElement('script'); - script.src = path; - script.async = false; - const promise = new Promise((resolve, reject) => { - script.onload = resolve; - script.onerror = reject; - }); - document.head.appendChild(script); - return promise; - })); + await loadMojoResources(resources, true); + await loadScript('/resources/chromium/mock-sms-receiver.js'); Status.kSuccess = blink.mojom.SmsStatus.kSuccess; Status.kTimeout = blink.mojom.SmsStatus.kTimeout; Status.kCancelled = blink.mojom.SmsStatus.kCancelled; }; -const Status = {}; - async function create_sms_provider() { if (typeof SmsProvider === 'undefined') { - await loadChromiumResources(); + if (isChromiumBased) { + await loadChromiumResources(); + } else { + throw new Error('Mojo testing interface is not available.'); + } } - if (typeof SmsProvider == 'undefined') { - throw new Error('Mojo testing interface is not available.'); + if (typeof SmsProvider === 'undefined') { + throw new Error('Failed to set up SmsProvider.'); } return new SmsProvider(); } diff --git a/tests/wpt/web-platform-tests/credential-management/support/otpcredential-iframe.html b/tests/wpt/web-platform-tests/credential-management/support/otpcredential-iframe.html index 37fe6e1cd89..83f25d573c8 100644 --- a/tests/wpt/web-platform-tests/credential-management/support/otpcredential-iframe.html +++ b/tests/wpt/web-platform-tests/credential-management/support/otpcredential-iframe.html @@ -1,5 +1,6 @@ <!doctype html> -<script src="./otpcredential-helper.js"></script> +<script src="/resources/test-only-api.js"></script> +<script src="otpcredential-helper.js"></script> <script> 'use strict'; diff --git a/tests/wpt/web-platform-tests/css/css-display/display-math-on-non-mathml-elements.html b/tests/wpt/web-platform-tests/css/css-display/display-math-on-non-mathml-elements.html new file mode 100644 index 00000000000..2d117cfff57 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-display/display-math-on-non-mathml-elements.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>display: math and inline-math on non-MathML compute to flow</title> +<link rel="help" href="https://drafts.csswg.org/css-display/#the-display-properties"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<div id="container"> + + <div data-expected="block" style="display: math;"></div> + <div data-expected="inline" style="display: inline-math;"></div> + <div data-expected="inline" style="display: inline math;"></div> + <div data-expected="block" style="display: block math;"></div> + + <svg data-expected="block" style="display: math;"></svg> + <svg data-expected="inline" style="display: inline-math;"></svg> + <svg data-expected="inline" style="display: inline math;"></svg> + <svg data-expected="block" style="display: block math;"></svg> + +</div> + +<script> + Array.from(container.children).forEach(element => { + test(function() { + assert_equals(window.getComputedStyle(element).display, + element.getAttribute('data-expected')); + }, `computed display on <${element.tagName} style="${element.getAttribute('style')}">`); + }); +</script> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001.html new file mode 100644 index 00000000000..6972d9cd9c4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001.html @@ -0,0 +1,128 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on non-stretched flex item w/ intrinsic ratio. + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: row; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: flex-start; + + float: left; /* For testing in "rows" */ + } + br { clear: both; } + + .flexbox > * { + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="16" data-expected-height="16"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="30" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="30"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="34" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="34" data-expected-height="34"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + max-height: 6px" data-expected-width="6" data-expected-height="6"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 6px; + max-height: 10px" data-expected-width="6" data-expected-height="6"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001v.html new file mode 100644 index 00000000000..91231dc4f44 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-001v.html @@ -0,0 +1,131 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on non-stretched flex item w/ intrinsic ratio + (with a vertical writing-mode on the flex items). + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: row; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: flex-start; + + float: left; /* For testing in "rows" */ + } + br { clear: both; } + + .flexbox > * { + writing-mode: vertical-lr; + + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="16" data-expected-height="16"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="30" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="30"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="34" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="34" data-expected-height="34"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + max-height: 6px" data-expected-width="6" data-expected-height="6"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 6px; + max-height: 10px" data-expected-width="6" data-expected-height="6"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002.html new file mode 100644 index 00000000000..4ae30b8afeb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002.html @@ -0,0 +1,128 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on non-stretched flex item w/ intrinsic ratio. + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: column; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: flex-start; + + float: left; /* For testing in "rows" */ + } + br { clear: both; } + + .flexbox > * { + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="16" data-expected-height="16"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="30" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="30"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="34" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="34" data-expected-height="34"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + max-height: 6px" data-expected-width="6" data-expected-height="6"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 6px; + max-height: 10px" data-expected-width="6" data-expected-height="6"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002v.html new file mode 100644 index 00000000000..6d0c0cafa77 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-002v.html @@ -0,0 +1,131 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on non-stretched flex item w/ intrinsic ratio + (with a vertical writing-mode on the flex items). + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: column; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: flex-start; + + float: left; /* For testing in "rows" */ + } + br { clear: both; } + + .flexbox > * { + writing-mode: vertical-lr; + + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="16" data-expected-height="16"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="30" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="30"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="34" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="34" data-expected-height="34"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + max-height: 6px" data-expected-width="6" data-expected-height="6"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 6px; + max-height: 10px" data-expected-width="6" data-expected-height="6"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003.html new file mode 100644 index 00000000000..03a9a6e3547 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003.html @@ -0,0 +1,128 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on stretched flex item w/ intrinsic ratio. + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: row; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: stretch; + + float: left; /* For testing in "rows" */ + } + br { clear: both; } + + .flexbox > * { + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="16" data-expected-height="40"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="30" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="40"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="34" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="34" data-expected-height="40"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + max-height: 6px" data-expected-width="6" data-expected-height="6"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 6px; + max-height: 10px" data-expected-width="6" data-expected-height="10"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="40"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="40"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003v.html new file mode 100644 index 00000000000..fd728027e0c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-003v.html @@ -0,0 +1,131 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on stretched flex item w/ intrinsic ratio + (with a vertical writing-mode on the flex items). + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: row; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: stretch; + + float: left; /* For testing in "rows" */ + } + br { clear: both; } + + .flexbox > * { + writing-mode: vertical-rl; + + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="16" data-expected-height="40"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="30" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="40"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="34" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="34" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="34" data-expected-height="40"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + max-height: 6px" data-expected-width="6" data-expected-height="6"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 6px; + max-height: 10px" data-expected-width="6" data-expected-height="10"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="40"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="40"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004.html new file mode 100644 index 00000000000..15e9f729271 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004.html @@ -0,0 +1,128 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on stretched flex item w/ intrinsic ratio. + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: column; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: stretch; + + float: left; /* For testing in "rows" */ + } + br { clear: both; } + + .flexbox > * { + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="40" data-expected-height="16"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="40" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="40" data-expected-height="30"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="40" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="40" data-expected-height="34"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + max-height: 6px" data-expected-width="10" data-expected-height="6"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 6px; + max-height: 10px" data-expected-width="6" data-expected-height="6"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004v.html new file mode 100644 index 00000000000..10e871a1c0e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-004v.html @@ -0,0 +1,131 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on stretched flex item w/ intrinsic ratio + (with a vertical writing-mode on the flex items). + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: column; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: stretch; + + float: left; /* For testing in "rows" */ + } + br { clear: both; } + + .flexbox > * { + writing-mode: vertical-rl; + + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="40" data-expected-height="16"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="40" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="40" data-expected-height="30"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="40" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="40" data-expected-height="34"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + max-height: 6px" data-expected-width="10" data-expected-height="6"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 6px; + max-height: 10px" data-expected-width="6" data-expected-height="6"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005.html new file mode 100644 index 00000000000..c4250956682 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005.html @@ -0,0 +1,130 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on non-stretched flexible flex item w/ intrinsic ratio. + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: row; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: flex-start; + + float: left; /* For testing in "rows" */ + } + br { clear: both; } + + .flexbox > * { + flex: 1; + + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="40" data-expected-height="40"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="40" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 1 1 30px" data-expected-width="40" data-expected-height="40"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="40" data-expected-height="40"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + max-height: 6px" data-expected-width="10" data-expected-height="6"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 6px; + max-height: 10px" data-expected-width="6" data-expected-height="6"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="40" data-expected-height="40"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005v.html new file mode 100644 index 00000000000..4acb8e259a9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-005v.html @@ -0,0 +1,132 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on non-stretched flexible flex item w/ intrinsic ratio + (with a vertical writing-mode on the flex items). + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: row; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: flex-start; + + float: left; /* For testing in "rows" */ + } + br { clear: both; } + + .flexbox > * { + flex: 1; + writing-mode: vertical-lr; + + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="40" data-expected-height="40"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="40" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 1 1 30px" data-expected-width="40" data-expected-height="40"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="40" data-expected-height="40"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + max-height: 6px" data-expected-width="10" data-expected-height="6"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 6px; + max-height: 10px" data-expected-width="6" data-expected-height="6"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="40" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="40" data-expected-height="40"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006.html new file mode 100644 index 00000000000..e97305e7074 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006.html @@ -0,0 +1,130 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on non-stretched flexible flex item w/ intrinsic ratio. + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: column; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: flex-start; + + float: left; /* For testing in "rows" */ + } + br { clear: both; } + + .flexbox > * { + flex: 1; + + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="40" data-expected-height="40"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 1 1 30px" data-expected-width="40" data-expected-height="40"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="40" data-expected-height="40"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + max-height: 6px" data-expected-width="6" data-expected-height="6"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 6px; + max-height: 10px" data-expected-width="6" data-expected-height="10"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="40"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="40"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006v.html new file mode 100644 index 00000000000..4f42288737d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-006v.html @@ -0,0 +1,132 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on non-stretched flexible flex item w/ intrinsic ratio + (with a vertical writing-mode on the flex items). + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: column; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: flex-start; + + float: left; /* For testing in "rows" */ + } + br { clear: both; } + + .flexbox > * { + flex: 1; + writing-mode: vertical-lr; + + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="40" data-expected-height="40"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 1 1 30px" data-expected-width="40" data-expected-height="40"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="40" data-expected-height="40"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px" data-expected-width="10" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 10px" data-expected-width="10" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + max-height: 6px" data-expected-width="6" data-expected-height="6"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 6px; + max-height: 10px" data-expected-width="6" data-expected-height="10"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="40"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="40" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="40"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="40"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007.html new file mode 100644 index 00000000000..16728b8c7e4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007.html @@ -0,0 +1,135 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on non-stretched flex item w/ intrinsic ratio, + some padding, and box-sizing:border-box. + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: row; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: flex-start; + + float: left; /* For testing in "rows" */ + } + img { + padding: 1px 2px 3px 4px; + box-sizing: border-box; + background: pink; + } + + br { clear: both; } + + .flexbox > * { + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="22" data-expected-height="20"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="28"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="32" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="28"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="32"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="36" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="36" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="34" data-expected-height="32"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 16px" data-expected-width="16" data-expected-height="14"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 16px" data-expected-width="18" data-expected-height="16"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 20px; + max-height: 14px" data-expected-width="16" data-expected-height="14"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 14px; + max-height: 20px" data-expected-width="14" data-expected-height="12"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007v.html b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007v.html new file mode 100644 index 00000000000..c9fbcc3e98a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-flexbox/image-as-flexitem-size-007v.html @@ -0,0 +1,137 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> + <head> + <meta charset="utf-8"> + <title> + CSS Test: Testing how explicit main-size & cross-size constraints + influence sizing on non-stretched flex item w/ intrinsic ratio, + some padding, box-sizing:border-box, and a vertical writing-mode. + </title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size"> + <link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#hypothetical-cross-size"> + <style> + .flexbox { + display: flex; + flex-direction: row; + border: 1px solid black; + margin: 0 2px 2px 0; /* (Just for spacing things out, visually) */ + width: 40px; + height: 40px; + + justify-content: flex-start; + align-items: flex-start; + + float: left; /* For testing in "rows" */ + } + img { + padding: 1px 2px 3px 4px; + box-sizing: border-box; + background: pink; + } + + br { clear: both; } + + .flexbox > * { + writing-mode: vertical-lr; + + /* Disable "min-width:auto"/"min-height:auto" to focus purely on + later channels of influence. */ + min-width: 0; + min-height: 0; + } + </style> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/check-layout-th.js"></script> + </head> + <body onload="checkLayout('.flexbox > img')"> + <!-- NOTE: solidblue.png has an intrinsic size of 16px by 16px. --> + + <!-- Row 1: no special sizing: --> + <div class="flexbox"> + <img src="support/solidblue.png" data-expected-width="22" data-expected-height="20"> + </div> + <br> + + <!-- Row 2: Specified main-size, cross-size, or flex-basis: --> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px" data-expected-width="30" data-expected-height="28"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="height: 30px" data-expected-width="32" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="flex: 0 0 30px" data-expected-width="30" data-expected-height="28"> + </div> + <br> + + <!-- Row 3: min main-size OR min cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px" data-expected-width="34" data-expected-height="32"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-height: 34px" data-expected-width="36" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + min-height: 34px" data-expected-width="36" data-expected-height="34"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 34px; + min-height: 30px" data-expected-width="34" data-expected-height="32"> + </div> + <br> + + <!-- Row 4: max main-size OR max cross-size, or both --> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 16px" data-expected-width="16" data-expected-height="14"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-height: 16px" data-expected-width="18" data-expected-height="16"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 20px; + max-height: 14px" data-expected-width="16" data-expected-height="14"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 14px; + max-height: 20px" data-expected-width="14" data-expected-height="12"> + </div> + <br> + + <!-- Row 5: min main-size vs. max cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <br> + + <!-- Row 6: min|max main-size vs. explicit cross-size, & vice versa --> + <div class="flexbox"> + <img src="support/solidblue.png" style="min-width: 30px; + height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 30px; + max-height: 10px" data-expected-width="30" data-expected-height="10"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="max-width: 10px; + height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + <div class="flexbox"> + <img src="support/solidblue.png" style="width: 10px; + min-height: 30px" data-expected-width="10" data-expected-height="30"> + </div> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container-ref.html new file mode 100644 index 00000000000..aa0ea5595d0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container-ref.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<html> + <meta charset="utf-8"> + <title>CSS Multi-column Layout Test Reference: Balance a grid container</title> + <link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com"> + <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> + + <style> + :root { + font: 16px/1.25 sans-serif; + } + .two-columns { + column-count: 2; + width: 550px; + } + .two-column-grid { + display: grid; + grid-template-columns: 1fr 1fr; + grid-auto-rows: auto; + } + .grid-col-1 { + grid-column: 1; + } + .grid-col-2 { + grid-column: 2; + } + .keep-together { + display: inline-block; + } + </style> + + <div class="two-columns"> + <div class="two-column-grid"> + <div class="grid-col-1">ID Number</div> + <div class="grid-col-2">01234567890</div> + <div class="grid-col-1">Address</div> + <div class="grid-col-2"> + <div class="keep-together"> + 123 Fake Street<br> + London<br> + NW1 1AA<br> + UK + </div> + </div> + </div> + + <div class="two-column-grid"> + <div class="grid-col-1">Relevant Countries</div> + <div class="grid-col-2"> + Ireland<br> + United Kingdom + </div> + </div> + </div> + + <div> + Some content underneath the details. + </div> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container.html b/tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container.html new file mode 100644 index 00000000000..64df23e09fb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/balance-grid-container.html @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<html> + <meta charset="utf-8"> + <title>CSS Multi-column Layout Test: Balance a grid container</title> + <link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com"> + <link rel="author" title="Mozilla" href="http://www.mozilla.org/"> + <link rel="help" href="https://drafts.csswg.org/css-multicol-1/#cf"> + <link ref="help" href="https://drafts.csswg.org/css-grid/"> + <link ref="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1657345"> + <link rel="match" href="balance-grid-container-ref.html"> + <meta name="assert" content="This test verifies a grid container in a balanced multicol container can have a balance multicol height."> + + <style> + :root { + font: 16px/1.25 sans-serif; + } + .two-columns { + column-count: 2; + width: 550px; + } + .two-column-grid { + display: grid; + grid-template-columns: 1fr 1fr; + grid-auto-rows: auto; + } + .grid-col-1 { + grid-column: 1; + } + .grid-col-2 { + grid-column: 2; + } + .keep-together { + display: inline-block; + } + </style> + + <div class="two-columns"> + <div class="two-column-grid"> + <div class="grid-col-1">ID Number</div> + <div class="grid-col-2">01234567890</div> + <div class="grid-col-1">Address</div> + <div class="grid-col-2"> + <div class="keep-together"> + 123 Fake Street<br> + London<br> + NW1 1AA<br> + UK + </div> + </div> + <div class="grid-col-1">Relevant Countries</div> + <div class="grid-col-2"> + Ireland<br> + United Kingdom + </div> + </div> + </div> + + <div> + Some content underneath the details. + </div> +</html> diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-012.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-012.html new file mode 100644 index 00000000000..7f1f9ae1ac4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-012.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#filling-columns"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="width:100px; height:100px; background:red;"> + <div style="columns:3; width:75px; height:100px; column-gap:0;"> + <div style="column-span:all; width:100px; height:70px; background:green;"></div> + <div style="height:120px; background:green;"></div> + </div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-001.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-001.html index b8c157a1ecd..c6cdb55baad 100644 --- a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-001.html +++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-001.html @@ -73,10 +73,11 @@ test(function() { let container = document.getElementById('container_auto_h'); let content = document.getElementById('content_auto_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "auto/auto scrollWidth"); + assert_equals(container.clientWidth, 200, "auto/auto clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "auto/auto offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "auto/auto clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "auto/auto offsetWidth"); }, "Unexpected layout: overflow auto, scrollbar-gutter auto, horizontal-tb"); test(function() { @@ -84,6 +85,7 @@ let content = document.getElementById('content_scroll_h'); assert_equals(container.scrollWidth, 180, "scroll/auto scrollWidth"); assert_equals(container.clientWidth, 180, "scroll/auto clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "scroll/auto offsetLeft"); assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth"); assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth"); }, "Unexpected layout: overflow scroll, scrollbar-gutter auto, horizontal-tb"); @@ -93,6 +95,7 @@ let content = document.getElementById('content_visible_h'); assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/auto offsetLeft"); assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); }, "Unexpected layout: overflow visible, scrollbar-gutter auto, horizontal-tb"); @@ -100,26 +103,31 @@ test(function() { let container = document.getElementById('container_hidden_h'); let content = document.getElementById('content_hidden_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); + assert_equals(container.scrollWidth, 200, "hidden/auto scrollWidth"); + assert_equals(container.clientWidth, 200, "hidden/auto clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/auto offsetLeft"); assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth"); assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth"); }, "Unexpected layout: overflow hidden, scrollbar-gutter auto, horizontal-tb"); + // vertical + test(function() { let container = document.getElementById('container_auto_v'); let content = document.getElementById('content_auto_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "auto/auto scrollHeight"); + assert_equals(container.clientHeight, 200, "auto/auto clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "auto/auto offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "auto/auto clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "auto/auto offsetHeight"); }, "Unexpected layout: overflow auto, scrollbar-gutter auto, vertical-rl"); test(function() { let container = document.getElementById('container_scroll_v'); let content = document.getElementById('content_scroll_v'); - assert_equals(container.scrollHeight, 180, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 180, "visible/auto clientHeight"); + assert_equals(container.scrollHeight, 180, "scroll/auto scrollHeight"); + assert_equals(container.clientHeight, 180, "scroll/auto clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "scroll/auto offsetTop"); assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight"); assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight"); }, "Unexpected layout: overflow scroll, scrollbar-gutter auto, vertical-rl"); @@ -129,6 +137,7 @@ let content = document.getElementById('content_visible_v'); assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/auto offsetTop"); assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); }, "Unexpected layout: overflow visible, scrollbar-gutter auto, vertical-rl"); @@ -136,8 +145,9 @@ test(function() { let container = document.getElementById('container_hidden_v'); let content = document.getElementById('content_hidden_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); + assert_equals(container.scrollHeight, 200, "hidden/auto scrollHeight"); + assert_equals(container.clientHeight, 200, "hidden/auto clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/auto offsetTop"); assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight"); assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight"); }, "Unexpected layout: overflow hidden, scrollbar-gutter auto, vertical-rl"); diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-002.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-002.html index 5cfc45c358c..8756ab7f0f8 100644 --- a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-002.html +++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-002.html @@ -19,6 +19,10 @@ background: deepskyblue; } + .container.force { + scrollbar-gutter: stable force; + } + .content { height: 100%; width: 100%; @@ -70,78 +74,130 @@ function performTest() { setup({explicit_done: true}); + // horizontal + test(function() { let container = document.getElementById('container_auto_h'); let content = document.getElementById('content_auto_h'); - assert_equals(container.scrollWidth, 180, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 180, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 180, "auto/stable scrollWidth"); + assert_equals(container.clientWidth, 180, "auto/stable clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "auto/stable offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "auto/stable clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "auto/stable offsetWidth"); }, "Unexpected layout: overflow auto, scrollbar-gutter stable, horizontal-tb"); test(function() { let container = document.getElementById('container_scroll_h'); let content = document.getElementById('content_scroll_h'); - assert_equals(container.scrollWidth, 180, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 180, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth"); + assert_equals(container.scrollWidth, 180, "scroll/stable scrollWidth"); + assert_equals(container.clientWidth, 180, "scroll/stable clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "scroll/stable offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "scroll/stable clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/stable offsetWidth"); }, "Unexpected layout: overflow scroll, scrollbar-gutter stable, horizontal-tb"); test(function() { let container = document.getElementById('container_visible_h'); let content = document.getElementById('content_visible_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "visible/stable scrollWidth"); + assert_equals(container.clientWidth, 200, "visible/stable clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/stable offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/stable clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "visible/stable offsetWidth"); }, "Unexpected layout: overflow visible, scrollbar-gutter stable, horizontal-tb"); test(function() { let container = document.getElementById('container_hidden_h'); let content = document.getElementById('content_hidden_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "hidden/stable scrollWidth"); + assert_equals(container.clientWidth, 200, "hidden/stable clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/stable offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/stable clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "hidden/stable offsetWidth"); }, "Unexpected layout: overflow hidden, scrollbar-gutter stable, horizontal-tb"); test(function() { + let container = document.getElementById('container_visible_force_h'); + let content = document.getElementById('content_visible_force_h'); + assert_equals(container.scrollWidth, 180, "visible/stable force scrollWidth"); + assert_equals(container.clientWidth, 180, "visible/stable force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/stable force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/stable force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/stable force offsetWidth"); + }, "Unexpected layout: overflow visible, scrollbar-gutter stable force, horizontal-tb"); + + test(function() { + let container = document.getElementById('container_hidden_force_h'); + let content = document.getElementById('content_hidden_force_h'); + assert_equals(container.scrollWidth, 180, "hidden/stable force scrollWidth"); + assert_equals(container.clientWidth, 180, "hidden/stable force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/stable force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/stable force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "hidden/stable force offsetWidth"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter stable force, horizontal-tb"); + + // vertical + + test(function() { let container = document.getElementById('container_auto_v'); let content = document.getElementById('content_auto_v'); - assert_equals(container.scrollHeight, 180, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 180, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 180, "auto/stable scrollHeight"); + assert_equals(container.clientHeight, 180, "auto/stable clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "auto/stable offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "auto/stable clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "auto/stable offsetHeight"); }, "Unexpected layout: overflow auto, scrollbar-gutter stable, vertical-rl"); test(function() { let container = document.getElementById('container_scroll_v'); let content = document.getElementById('content_scroll_v'); - assert_equals(container.scrollHeight, 180, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 180, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight"); + assert_equals(container.scrollHeight, 180, "scroll/stable scrollHeight"); + assert_equals(container.clientHeight, 180, "scroll/stable clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "scroll/stable offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "scroll/stable clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/stable offsetHeight"); }, "Unexpected layout: overflow scroll, scrollbar-gutter stable, vertical-rl"); test(function() { let container = document.getElementById('container_visible_v'); let content = document.getElementById('content_visible_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "visible/stable scrollHeight"); + assert_equals(container.clientHeight, 200, "visible/stable clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/stable offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/stable clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "visible/stable offsetHeight"); }, "Unexpected layout: overflow visible, scrollbar-gutter stable, vertical-rl"); test(function() { let container = document.getElementById('container_hidden_v'); let content = document.getElementById('content_hidden_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "hidden/stable scrollHeight"); + assert_equals(container.clientHeight, 200, "hidden/stable clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/stable offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/stable clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "hidden/stable offsetHeight"); }, "Unexpected layout: overflow hidden, scrollbar-gutter stable, vertical-rl"); + test(function() { + let container = document.getElementById('container_visible_force_v'); + let content = document.getElementById('content_visible_force_v'); + assert_equals(container.scrollHeight, 180, "visible/stable force scrollHeight"); + assert_equals(container.clientHeight, 180, "visible/stable force clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/stable force offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/stable force clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/stable force offsetHeight"); + }, "Unexpected layout: overflow visible, scrollbar-gutter stable force, vertical-rl"); + + test(function() { + let container = document.getElementById('container_hidden_force_v'); + let content = document.getElementById('content_hidden_force_v'); + assert_equals(container.scrollHeight, 180, "hidden/stable force scrollHeight"); + assert_equals(container.clientHeight, 180, "hidden/stable force clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/stable force offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/stable force clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "hidden/stable force offsetHeight"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter stable force, vertical-rl"); + done(); } @@ -166,6 +222,16 @@ <div class="content" id="content_hidden_h">overflow-y: hidden</div> </div> + scrollbar-gutter: stable force + + <div class="container classic horizontal visible force" id="container_visible_force_h"> + <div class="content" id="content_visible_force_h">overflow: visible (force)</div> + </div> + + <div class="container classic horizontal hidden force" id="container_hidden_force_h"> + <div class="content" id="content_hidden_force_h">overflow-y: hidden (force)</div> + </div> + writing-mode: vertical-rl; <div class="container classic vertical auto" id="container_auto_v"> @@ -184,4 +250,14 @@ <div class="content" id="content_hidden_v">overflow-x: hidden</div> </div> + scrollbar-gutter: stable force + + <div class="container classic vertical visible force" id="container_visible_force_v"> + <div class="content" id="content_visible_force_v">overflow: visible</div> + </div> + + <div class="container classic vertical hidden force" id="container_hidden_force_v"> + <div class="content" id="content_hidden_force_v">overflow-x: hidden</div> + </div> + </body> diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-003.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-003.html index 17f724fb37c..1002b462390 100644 --- a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-003.html +++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-003.html @@ -19,6 +19,10 @@ background: deepskyblue; } + .container.force { + scrollbar-gutter: always force; + } + .content { height: 100%; width: 100%; @@ -70,78 +74,130 @@ function performTest() { setup({explicit_done: true}); + // horizontal + test(function() { let container = document.getElementById('container_auto_h'); let content = document.getElementById('content_auto_h'); - assert_equals(container.scrollWidth, 180, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 180, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 180, "auto/always scrollWidth"); + assert_equals(container.clientWidth, 180, "auto/always clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "auto/always offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "auto/always clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "auto/always offsetWidth"); }, "Unexpected layout: overflow auto, scrollbar-gutter always, horizontal-tb"); test(function() { let container = document.getElementById('container_scroll_h'); let content = document.getElementById('content_scroll_h'); - assert_equals(container.scrollWidth, 180, "scroll/auto scrollWidth"); - assert_equals(container.clientWidth, 180, "scroll/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth"); + assert_equals(container.scrollWidth, 180, "scroll/always scrollWidth"); + assert_equals(container.clientWidth, 180, "scroll/always clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "scroll/always offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "scroll/always clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/always offsetWidth"); }, "Unexpected layout: overflow scroll, scrollbar-gutter always, horizontal-tb"); test(function() { let container = document.getElementById('container_visible_h'); let content = document.getElementById('content_visible_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "visible/always scrollWidth"); + assert_equals(container.clientWidth, 200, "visible/always clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/always offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/always clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "visible/always offsetWidth"); }, "Unexpected layout: overflow visible, scrollbar-gutter always, horizontal-tb"); test(function() { let container = document.getElementById('container_hidden_h'); let content = document.getElementById('content_hidden_h'); - assert_equals(container.scrollWidth, 200, "hidden/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "hidden/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "hidden/always scrollWidth"); + assert_equals(container.clientWidth, 200, "hidden/always clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/always offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/always clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "hidden/always offsetWidth"); }, "Unexpected layout: overflow hidden, scrollbar-gutter always, horizontal-tb"); test(function() { + let container = document.getElementById('container_visible_force_h'); + let content = document.getElementById('content_visible_force_h'); + assert_equals(container.scrollWidth, 180, "visible/always force scrollWidth"); + assert_equals(container.clientWidth, 180, "visible/always force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/always force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/always force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/always force offsetWidth"); + }, "Unexpected layout: overflow visible, scrollbar-gutter always force, horizontal-tb"); + + test(function() { + let container = document.getElementById('container_hidden_force_h'); + let content = document.getElementById('content_hidden_force_h'); + assert_equals(container.scrollWidth, 180, "hidden/always force scrollWidth"); + assert_equals(container.clientWidth, 180, "hidden/always force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/always force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/always force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "hidden/always force offsetWidth"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter always force, horizontal-tb"); + + // vertical + + test(function() { let container = document.getElementById('container_auto_v'); let content = document.getElementById('content_auto_v'); - assert_equals(container.scrollHeight, 180, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 180, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 180, "auto/always scrollHeight"); + assert_equals(container.clientHeight, 180, "auto/always clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "auto/always offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "auto/always clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "auto/always offsetHeight"); }, "Unexpected layout: overflow auto, scrollbar-gutter always, vertical-rl"); test(function() { let container = document.getElementById('container_scroll_v'); let content = document.getElementById('content_scroll_v'); - assert_equals(container.scrollHeight, 180, "scroll/auto scrollHeight"); - assert_equals(container.clientHeight, 180, "scroll/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight"); + assert_equals(container.scrollHeight, 180, "scroll/always scrollHeight"); + assert_equals(container.clientHeight, 180, "scroll/always clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "scroll/always offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "scroll/always clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/always offsetHeight"); }, "Unexpected layout: overflow scroll, scrollbar-gutter always, vertical-rl"); test(function() { let container = document.getElementById('container_visible_v'); let content = document.getElementById('content_visible_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "visible/always scrollHeight"); + assert_equals(container.clientHeight, 200, "visible/always clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/always offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/always clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "visible/always offsetHeight"); }, "Unexpected layout: overflow visible, scrollbar-gutter always, vertical-rl"); test(function() { let container = document.getElementById('container_hidden_v'); let content = document.getElementById('content_hidden_v'); - assert_equals(container.scrollHeight, 200, "hidden/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "hidden/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "hidden/always scrollHeight"); + assert_equals(container.clientHeight, 200, "hidden/always clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/always offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/always clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "hidden/always offsetHeight"); }, "Unexpected layout: overflow hidden, scrollbar-gutter always, vertical-rl"); + test(function() { + let container = document.getElementById('container_visible_force_v'); + let content = document.getElementById('content_visible_force_v'); + assert_equals(container.scrollHeight, 180, "visible/always force scrollHeight"); + assert_equals(container.clientHeight, 180, "visible/always force clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/always force offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/always force clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/always force offsetHeight"); + }, "Unexpected layout: overflow visible, scrollbar-gutter always force, vertical-rl"); + + test(function() { + let container = document.getElementById('container_hidden_force_v'); + let content = document.getElementById('content_hidden_force_v'); + assert_equals(container.scrollHeight, 180, "hidden/always force scrollHeight"); + assert_equals(container.clientHeight, 180, "hidden/always force clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/always force offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/always force clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "hidden/always force offsetHeight"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter always force, vertical-rl"); + done(); } @@ -166,6 +222,16 @@ <div class="content" id="content_hidden_h">overflow-y: hidden</div> </div> + scrollbar-gutter: always force + + <div class="container classic horizontal visible force" id="container_visible_force_h"> + <div class="content" id="content_visible_force_h">overflow: visible (force)</div> + </div> + + <div class="container classic horizontal hidden force" id="container_hidden_force_h"> + <div class="content" id="content_hidden_force_h">overflow-y: hidden (force)</div> + </div> + writing-mode: vertical-rl; <div class="container classic vertical auto" id="container_auto_v"> @@ -184,4 +250,14 @@ <div class="content" id="content_hidden_v">overflow-x: hidden</div> </div> + scrollbar-gutter: always force + + <div class="container classic vertical visible force" id="container_visible_force_v"> + <div class="content" id="content_visible_force_v">overflow: visible</div> + </div> + + <div class="container classic vertical hidden force" id="container_hidden_force_v"> + <div class="content" id="content_hidden_force_v">overflow-x: hidden</div> + </div> + </body> diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-004.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-004.html index 2f9ac9b7f33..b41e3491f27 100644 --- a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-004.html +++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-004.html @@ -19,6 +19,10 @@ background: deepskyblue; } + .container.force { + scrollbar-gutter: stable both force; + } + .content { height: 100%; width: 100%; @@ -70,78 +74,130 @@ function performTest() { setup({explicit_done: true}); + // horizontal + test(function() { let container = document.getElementById('container_auto_h'); let content = document.getElementById('content_auto_h'); - assert_equals(container.scrollWidth, 160, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 160, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 160, "auto/stable both scrollWidth"); + assert_equals(container.clientWidth, 160, "auto/stable both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "auto/stable both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "auto/stable both clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "auto/stable both offsetWidth"); }, "Unexpected layout: overflow auto, scrollbar-gutter stable both, horizontal-tb"); test(function() { let container = document.getElementById('container_scroll_h'); let content = document.getElementById('content_scroll_h'); - assert_equals(container.scrollWidth, 160, "scroll/auto scrollWidth"); - assert_equals(container.clientWidth, 160, "scroll/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth"); + assert_equals(container.scrollWidth, 160, "scroll/stable both scrollWidth"); + assert_equals(container.clientWidth, 160, "scroll/stable both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "scroll/stable both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "scroll/stable both clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/stable both offsetWidth"); }, "Unexpected layout: overflow scroll, scrollbar-gutter stable both, horizontal-tb"); test(function() { let container = document.getElementById('container_visible_h'); let content = document.getElementById('content_visible_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "visible/stable both scrollWidth"); + assert_equals(container.clientWidth, 200, "visible/stable both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/stable both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/stable both clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "visible/stable both offsetWidth"); }, "Unexpected layout: overflow visible, scrollbar-gutter stable both, horizontal-tb"); test(function() { let container = document.getElementById('container_hidden_h'); let content = document.getElementById('content_hidden_h'); - assert_equals(container.scrollWidth, 200, "hidden/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "hidden/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "hidden/stable both scrollWidth"); + assert_equals(container.clientWidth, 200, "hidden/stable both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/stable both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/stable both clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "hidden/stable both offsetWidth"); }, "Unexpected layout: overflow hidden, scrollbar-gutter stable both, horizontal-tb"); test(function() { + let container = document.getElementById('container_visible_force_h'); + let content = document.getElementById('content_visible_force_h'); + assert_equals(container.scrollWidth, 160, "visible/stable both force scrollWidth"); + assert_equals(container.clientWidth, 160, "visible/stable both force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "visible/stable both force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/stable both force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/stable both force offsetWidth"); + }, "Unexpected layout: overflow visible, scrollbar-gutter stable both force, horizontal-tb"); + + test(function() { + let container = document.getElementById('container_hidden_force_h'); + let content = document.getElementById('content_hidden_force_h'); + assert_equals(container.scrollWidth, 160, "hidden/stable both force scrollWidth"); + assert_equals(container.clientWidth, 160, "hidden/stable both force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "hidden/stable both force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/stable both force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "hidden/stable both force offsetWidth"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter stable both force, horizontal-tb"); + + // vertical + + test(function() { let container = document.getElementById('container_auto_v'); let content = document.getElementById('content_auto_v'); - assert_equals(container.scrollHeight, 160, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 160, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 160, "auto/stable both scrollHeight"); + assert_equals(container.clientHeight, 160, "auto/stable both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "auto/stable both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "auto/stable both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "auto/stable both offsetHeight"); }, "Unexpected layout: overflow auto, scrollbar-gutter stable both, vertical-rl"); test(function() { let container = document.getElementById('container_scroll_v'); let content = document.getElementById('content_scroll_v'); - assert_equals(container.scrollHeight, 160, "scroll/auto scrollHeight"); - assert_equals(container.clientHeight, 160, "scroll/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight"); + assert_equals(container.scrollHeight, 160, "scroll/stable both scrollHeight"); + assert_equals(container.clientHeight, 160, "scroll/stable both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "scroll/stable both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "scroll/stable both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/stable both offsetHeight"); }, "Unexpected layout: overflow scroll, scrollbar-gutter stable both, vertical-rl"); test(function() { let container = document.getElementById('container_visible_v'); let content = document.getElementById('content_visible_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "visible/stable both scrollHeight"); + assert_equals(container.clientHeight, 200, "visible/stable both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/stable both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/stable both clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "visible/stable both offsetHeight"); }, "Unexpected layout: overflow visible, scrollbar-gutter stable both, vertical-rl"); test(function() { let container = document.getElementById('container_hidden_v'); let content = document.getElementById('content_hidden_v'); - assert_equals(container.scrollHeight, 200, "hidden/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "hidden/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "hidden/stable both scrollHeight"); + assert_equals(container.clientHeight, 200, "hidden/stable both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/stable both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/stable both clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "hidden/stable both offsetHeight"); }, "Unexpected layout: overflow hidden, scrollbar-gutter stable both, vertical-rl"); + test(function() { + let container = document.getElementById('container_visible_force_v'); + let content = document.getElementById('content_visible_force_v'); + assert_equals(container.scrollHeight, 160, "visible/stable both scrollHeight"); + assert_equals(container.clientHeight, 160, "visible/stable both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "visible/stable both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/stable both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/stable both offsetHeight"); + }, "Unexpected layout: overflow visible, scrollbar-gutter stable both force, vertical-rl"); + + test(function() { + let container = document.getElementById('container_hidden_force_v'); + let content = document.getElementById('content_hidden_force_v'); + assert_equals(container.scrollHeight, 160, "hidden/stable both scrollHeight"); + assert_equals(container.clientHeight, 160, "hidden/stable both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "hidden/stable both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/stable both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "hidden/stable both offsetHeight"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter stable both force, vertical-rl"); + done(); } @@ -166,6 +222,16 @@ <div class="content" id="content_hidden_h">overflow-y: hidden</div> </div> + scrollbar-gutter: stable both force + + <div class="container classic horizontal visible force" id="container_visible_force_h"> + <div class="content" id="content_visible_force_h">overflow: visible (force)</div> + </div> + + <div class="container classic horizontal hidden force" id="container_hidden_force_h"> + <div class="content" id="content_hidden_force_h">overflow-y: hidden (force)</div> + </div> + writing-mode: vertical-rl; <div class="container classic vertical auto" id="container_auto_v"> @@ -184,4 +250,14 @@ <div class="content" id="content_hidden_v">overflow-x: hidden</div> </div> + scrollbar-gutter: stable both force + + <div class="container classic vertical visible force" id="container_visible_force_v"> + <div class="content" id="content_visible_force_v">overflow: visible</div> + </div> + + <div class="container classic vertical hidden force" id="container_hidden_force_v"> + <div class="content" id="content_hidden_force_v">overflow-x: hidden</div> + </div> + </body> diff --git a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-005.html b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-005.html index 5f1e8413f3b..dca465770dd 100644 --- a/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-005.html +++ b/tests/wpt/web-platform-tests/css/css-overflow/scrollbar-gutter-005.html @@ -19,6 +19,10 @@ background: deepskyblue; } + .container.force { + scrollbar-gutter: always both force; + } + .content { height: 100%; width: 100%; @@ -70,78 +74,130 @@ function performTest() { setup({explicit_done: true}); + // horizontal + test(function() { let container = document.getElementById('container_auto_h'); let content = document.getElementById('content_auto_h'); - assert_equals(container.scrollWidth, 160, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 160, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 160, "auto/always both scrollWidth"); + assert_equals(container.clientWidth, 160, "auto/always both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "auto/always both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "auto/always both clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "auto/always both offsetWidth"); }, "Unexpected layout: overflow auto, scrollbar-gutter always both, horizontal-tb"); test(function() { let container = document.getElementById('container_scroll_h'); let content = document.getElementById('content_scroll_h'); - assert_equals(container.scrollWidth, 160, "scroll/auto scrollWidth"); - assert_equals(container.clientWidth, 160, "scroll/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "scroll/auto clientWidth"); - assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/auto offsetWidth"); + assert_equals(container.scrollWidth, 160, "scroll/always both scrollWidth"); + assert_equals(container.clientWidth, 160, "scroll/always both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "scroll/always both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "scroll/always both clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "scroll/always both offsetWidth"); }, "Unexpected layout: overflow scroll, scrollbar-gutter always both, horizontal-tb"); test(function() { let container = document.getElementById('container_visible_h'); let content = document.getElementById('content_visible_h'); - assert_equals(container.scrollWidth, 200, "visible/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "visible/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "visible/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "visible/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "visible/always both scrollWidth"); + assert_equals(container.clientWidth, 200, "visible/always both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "visible/always both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/always both clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "visible/always both offsetWidth"); }, "Unexpected layout: overflow visible, scrollbar-gutter always both, horizontal-tb"); test(function() { let container = document.getElementById('container_hidden_h'); let content = document.getElementById('content_hidden_h'); - assert_equals(container.scrollWidth, 200, "hidden/auto scrollWidth"); - assert_equals(container.clientWidth, 200, "hidden/auto clientWidth"); - assert_equals(container.clientWidth, content.clientWidth, "hidden/auto clientWidth"); - assert_equals(container.offsetWidth, content.offsetWidth, "hidden/auto offsetWidth"); + assert_equals(container.scrollWidth, 200, "hidden/always both scrollWidth"); + assert_equals(container.clientWidth, 200, "hidden/always both clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft, "hidden/always both offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/always both clientWidth"); + assert_equals(container.offsetWidth, content.offsetWidth, "hidden/always both offsetWidth"); }, "Unexpected layout: overflow hidden, scrollbar-gutter always both, horizontal-tb"); test(function() { + let container = document.getElementById('container_visible_force_h'); + let content = document.getElementById('content_visible_force_h'); + assert_equals(container.scrollWidth, 160, "visible/always both force scrollWidth"); + assert_equals(container.clientWidth, 160, "visible/always both force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "visible/always both force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "visible/always both force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "visible/always both force offsetWidth"); + }, "Unexpected layout: overflow visible, scrollbar-gutter always both force, horizontal-tb"); + + test(function() { + let container = document.getElementById('container_hidden_force_h'); + let content = document.getElementById('content_hidden_force_h'); + assert_equals(container.scrollWidth, 160, "hidden/always both force scrollWidth"); + assert_equals(container.clientWidth, 160, "hidden/always both force clientWidth"); + assert_equals(container.offsetLeft, content.offsetLeft - 20, "hidden/always both force offsetLeft"); + assert_equals(container.clientWidth, content.clientWidth, "hidden/always both force clientWidth"); + assert_not_equals(container.offsetWidth, content.offsetWidth, "hidden/always both force offsetWidth"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter always both force, horizontal-tb"); + + // vertical + + test(function() { let container = document.getElementById('container_auto_v'); let content = document.getElementById('content_auto_v'); - assert_equals(container.scrollHeight, 160, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 160, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 160, "auto/always both scrollHeight"); + assert_equals(container.clientHeight, 160, "auto/always both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "auto/always both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "auto/always both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "auto/always both offsetHeight"); }, "Unexpected layout: overflow auto, scrollbar-gutter always both, vertical-rl"); test(function() { let container = document.getElementById('container_scroll_v'); let content = document.getElementById('content_scroll_v'); - assert_equals(container.scrollHeight, 160, "scroll/auto scrollHeight"); - assert_equals(container.clientHeight, 160, "scroll/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "scroll/auto clientHeight"); - assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/auto offsetHeight"); + assert_equals(container.scrollHeight, 160, "scroll/always both scrollHeight"); + assert_equals(container.clientHeight, 160, "scroll/always both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "scroll/always both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "scroll/always both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "scroll/always both offsetHeight"); }, "Unexpected layout: overflow scroll, scrollbar-gutter always both, vertical-rl"); test(function() { let container = document.getElementById('container_visible_v'); let content = document.getElementById('content_visible_v'); - assert_equals(container.scrollHeight, 200, "visible/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "visible/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "visible/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "visible/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "visible/always both scrollHeight"); + assert_equals(container.clientHeight, 200, "visible/always both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "visible/always both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/always both clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "visible/always both offsetHeight"); }, "Unexpected layout: overflow visible, scrollbar-gutter always both, vertical-rl"); test(function() { let container = document.getElementById('container_hidden_v'); let content = document.getElementById('content_hidden_v'); - assert_equals(container.scrollHeight, 200, "hidden/auto scrollHeight"); - assert_equals(container.clientHeight, 200, "hidden/auto clientHeight"); - assert_equals(container.clientHeight, content.clientHeight, "hidden/auto clientHeight"); - assert_equals(container.offsetHeight, content.offsetHeight, "hidden/auto offsetHeight"); + assert_equals(container.scrollHeight, 200, "hidden/always both scrollHeight"); + assert_equals(container.clientHeight, 200, "hidden/always both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop, "hidden/always both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/always both clientHeight"); + assert_equals(container.offsetHeight, content.offsetHeight, "hidden/always both offsetHeight"); }, "Unexpected layout: overflow hidden, scrollbar-gutter always both, vertical-rl"); + test(function() { + let container = document.getElementById('container_visible_force_v'); + let content = document.getElementById('content_visible_force_v'); + assert_equals(container.scrollHeight, 160, "visible/always both scrollHeight"); + assert_equals(container.clientHeight, 160, "visible/always both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "visible/always both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "visible/always both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "visible/always both offsetHeight"); + }, "Unexpected layout: overflow visible, scrollbar-gutter always both force, vertical-rl"); + + test(function() { + let container = document.getElementById('container_hidden_force_v'); + let content = document.getElementById('content_hidden_force_v'); + assert_equals(container.scrollHeight, 160, "hidden/always both scrollHeight"); + assert_equals(container.clientHeight, 160, "hidden/always both clientHeight"); + assert_equals(container.offsetTop, content.offsetTop - 20, "hidden/always both offsetTop"); + assert_equals(container.clientHeight, content.clientHeight, "hidden/always both clientHeight"); + assert_not_equals(container.offsetHeight, content.offsetHeight, "hidden/always both offsetHeight"); + }, "Unexpected layout: overflow hidden, scrollbar-gutter always both force, vertical-rl"); + done(); } @@ -166,6 +222,16 @@ <div class="content" id="content_hidden_h">overflow-y: hidden</div> </div> + scrollbar-gutter: always both force + + <div class="container classic horizontal visible force" id="container_visible_force_h"> + <div class="content" id="content_visible_force_h">overflow: visible (force)</div> + </div> + + <div class="container classic horizontal hidden force" id="container_hidden_force_h"> + <div class="content" id="content_hidden_force_h">overflow-y: hidden (force)</div> + </div> + writing-mode: vertical-rl; <div class="container classic vertical auto" id="container_auto_v"> @@ -184,4 +250,14 @@ <div class="content" id="content_hidden_v">overflow-x: hidden</div> </div> + scrollbar-gutter: always both force + + <div class="container classic vertical visible force" id="container_visible_force_v"> + <div class="content" id="content_visible_force_v">overflow: visible</div> + </div> + + <div class="container classic vertical hidden force" id="container_hidden_force_v"> + <div class="content" id="content_hidden_force_v">overflow-x: hidden</div> + </div> + </body> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-012.tentative.html b/tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-012.tentative.html new file mode 100644 index 00000000000..537f8778f91 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-012.tentative.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>CSS aspect-ratio: out-of-flow div block size + min-size: auto</title> +<link rel="author" title="Google LLC" href="https://www.google.com/"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio"> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" /> + +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + +<div style="background: green; width: 100px; aspect-ratio: 2/1; position: absolute;"> + <div style="height: 100px;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-013.tentative.html b/tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-013.tentative.html new file mode 100644 index 00000000000..16c3417b48f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-sizing/aspect-ratio/abspos-013.tentative.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<title>CSS aspect-ratio: abspos div inline size + min-size: auto</title> +<link rel="author" title="Google LLC" href="https://www.google.com/"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-4/#aspect-ratio"> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht" /> + +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> + +<div style="background: green; height: 100px; aspect-ratio: 1/2; position: absolute;"> + <div style="width: 100px;"></div> +</div> diff --git a/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z-ref.html new file mode 100644 index 00000000000..b2399db472f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z-ref.html @@ -0,0 +1,2 @@ +<!DOCTYPE html> +<div style="width: 100px; height: 100px; background: green"></div>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z.html b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z.html new file mode 100644 index 00000000000..5d539f63cfe --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-hidden-3d-transform-z.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<link rel="author" title="Seokho Song" href="mailto:0xdevssh@gmail.com"> +<link rel="help" href="https://www.w3.org/TR/css-transforms-2/#3d-transform-rendering/"> +<link rel="match" href="scrolalble-hidden-3d-transform-z-ref.html"> +<style> +#container { + width: 100px; + height: 100px; + background: green; + position: relative; + transform-style: preserve-3d; +} +#scroller { + width: 100px; + height: 100px; + background: red; + position: absolute; + transform: translateZ(-1px); + overflow-y: hidden; +} +</style> +<div id="container"> + <div id="scroller"> + <div style="height: 300px"></div> + </div> +</div>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z-ref.html b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z-ref.html new file mode 100644 index 00000000000..b2399db472f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z-ref.html @@ -0,0 +1,2 @@ +<!DOCTYPE html> +<div style="width: 100px; height: 100px; background: green"></div>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z.html b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z.html new file mode 100644 index 00000000000..fd273fdf109 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transforms/scrolalble-scroll-3d-transform-z.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<link rel="author" title="Seokho Song" href="mailto:0xdevssh@gmail.com"> +<link rel="help" href="https://www.w3.org/TR/css-transforms-2/#3d-transform-rendering/"> +<link rel="match" href="scrolalble-scroll-3d-transform-z-ref.html"> +<style> +#container { + width: 100px; + height: 100px; + background: green; + position: relative; + transform-style: preserve-3d; +} +#scroller { + width: 100px; + height: 100px; + background: red; + position: absolute; + transform: translateZ(-1px); + overflow-y: scroll; +} +</style> +<div id="container"> + <div id="scroller"> + <div style="height: 300px"></div> + </div> +</div>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/css/selectors/is-where-error-recovery.tentative.html b/tests/wpt/web-platform-tests/css/selectors/is-where-error-recovery.tentative.html new file mode 100644 index 00000000000..31f5b8ccc6c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/is-where-error-recovery.tentative.html @@ -0,0 +1,54 @@ +<!doctype html> +<title>CSS Selectors: :is() and :where() error recovery</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/3676"> +<link rel="help" href="https://drafts.csswg.org/selectors-4/#matches"> +<link rel="help" href="https://drafts.csswg.org/selectors-4/#zero-matches"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style id="test-sheet"> + random-selector { color: blue; } +</style> +<div id="test-div"></div> +<script> + let rule = document.getElementById("test-sheet").sheet.cssRules[0]; + test(function() { + for (let pseudo of ["is", "where"]) { + rule.selectorText = "random-selector"; + let invalidSelector = `:${pseudo}(:total-nonsense)`; + rule.selectorText = invalidSelector; + assert_not_equals( + rule.selectorText, + "random-selector", + "Should've parsed", + ); + assert_not_equals( + rule.selectorText, + invalidSelector, + "Should not be considered valid and parsed as-is", + ); + let emptyList = `:${pseudo}()`; + assert_equals( + rule.selectorText, + emptyList, + "Should be serialized as an empty selector-list", + ); + assert_equals(document.querySelector(emptyList), null, "Should never match, but should parse"); + for (let mixedList of [ + `:${pseudo}(:total-nonsense, #test-div)`, + `:${pseudo}(:total-nonsense and-more-stuff, #test-div)`, + `:${pseudo}(weird-token || and-more-stuff, #test-div)`, + ]) { + rule.selectorText = mixedList; + assert_equals( + rule.selectorText, + `:${pseudo}(#test-div)`, + `${mixedList}: Should ignore invalid selectors`, + ); + let testDiv = document.getElementById("test-div"); + assert_equals(document.querySelector(mixedList), testDiv, "Should correctly match"); + assert_equals(getComputedStyle(testDiv).color, "rgb(0, 0, 255)", "test element should be blue"); + } + } + }); +</script> diff --git a/tests/wpt/web-platform-tests/css/selectors/is-where-parsing.html b/tests/wpt/web-platform-tests/css/selectors/is-where-parsing.html index 0f064bab73c..33cb6ad726b 100644 --- a/tests/wpt/web-platform-tests/css/selectors/is-where-parsing.html +++ b/tests/wpt/web-platform-tests/css/selectors/is-where-parsing.html @@ -5,18 +5,22 @@ <link rel="help" href="https://drafts.csswg.org/selectors-4/#zero-matches"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<style id="test-sheet"> + random-selector { color: blue; } +</style> <script> + let rule = document.getElementById("test-sheet").sheet.cssRules[0]; function assert_valid(expected_valid, pattern, description) { test(function() { for (let pseudo of ["is", "where"]) { - let valid = false; let selector = pattern.replace("{}", ":" + pseudo) - try { - document.querySelector(selector); - valid = true; - } catch (ex) {} - - assert_equals(valid, expected_valid, `${description}: ${selector}`); + rule.selectorText = "random-selector"; + rule.selectorText = selector; + (expected_valid ? assert_equals : assert_not_equals)( + rule.selectorText, + selector, + `${description}: ${selector}` + ); } }, description); } diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/attribute.html b/tests/wpt/web-platform-tests/css/selectors/parsing/attribute.html new file mode 100644 index 00000000000..a8fcfb24f5a --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/parsing/attribute.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Selectors: Attribute selectors</title> +<link rel="help" href="https://drafts.csswg.org/selectors-3/#attribute-selectors"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<script> + // Attribute presence and value selectors + test_valid_selector('[att]'); + test_valid_selector('[att=val]', '[att="val"]'); + test_valid_selector('[att~=val]', '[att~="val"]'); + test_valid_selector('[att|=val]', '[att|="val"]'); + test_valid_selector('h1[title]'); + test_valid_selector("span[class='example']", 'span[class="example"]'); + test_valid_selector('a[hreflang=fr]', 'a[hreflang="fr"]'); + test_valid_selector("a[hreflang|='en']", 'a[hreflang|="en"]'); + + // Substring matching attribute selectors + test_valid_selector('[att^=val]', '[att^="val"]'); + test_valid_selector('[att$=val]', '[att$="val"]'); + test_valid_selector('[att*=val]', '[att*="val"]'); + test_valid_selector('object[type^="image/"]'); + test_valid_selector('a[href$=".html"]'); + test_valid_selector('p[title*="hello"]'); + + // From Attribute selectors and namespaces examples in spec: + test_valid_selector('[*|att]'); + test_valid_selector('[|att]', '[att]'); +</script> diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/child.html b/tests/wpt/web-platform-tests/css/selectors/parsing/child.html new file mode 100644 index 00000000000..510c45db867 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/parsing/child.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Selectors: Child combinators</title> +<link rel="help" href="https://drafts.csswg.org/selectors-3/#child-combinators"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<script> + test_valid_selector('body > p'); + test_valid_selector('div ol>li p', 'div ol > li p'); +</script> diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/class.html b/tests/wpt/web-platform-tests/css/selectors/parsing/class.html new file mode 100644 index 00000000000..00abcf838da --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/parsing/class.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Selectors: Class selectors</title> +<link rel="help" href="https://drafts.csswg.org/selectors-3/#class-html"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<script> + test_valid_selector('*.pastoral', + ['*.pastoral', '.pastoral']); + test_valid_selector('.pastoral', + ['*.pastoral', '.pastoral']); + test_valid_selector('h1.pastoral'); + test_valid_selector('p.pastoral.marine'); +</script> diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/descendant.html b/tests/wpt/web-platform-tests/css/selectors/parsing/descendant.html new file mode 100644 index 00000000000..5ff3a7bbfd9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/parsing/descendant.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Selectors: Descendant combinator</title> +<link rel="help" href="https://drafts.csswg.org/selectors-3/#descendant-combinators"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<script> + test_valid_selector('h1 em'); + test_valid_selector('div * p'); + test_valid_selector('div p *[href]', + ['div p *[href]', 'div p [href]']); +</script> diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/id.html b/tests/wpt/web-platform-tests/css/selectors/parsing/id.html new file mode 100644 index 00000000000..2441c4217eb --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/parsing/id.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Selectors: ID selectors</title> +<link rel="help" href="https://drafts.csswg.org/selectors-3/#id-selectors"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<script> + test_valid_selector('h1#chapter1'); + test_valid_selector('#chapter1'); + test_valid_selector('*#z98y', + ['*#z98y', '#z98y']); +</script> diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/is.html b/tests/wpt/web-platform-tests/css/selectors/parsing/is.html new file mode 100644 index 00000000000..68236445c5f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/parsing/is.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Selectors: The Matches-Any Pseudo-class: ':is()'</title> +<link rel="help" href="https://drafts.csswg.org/selectors/#matches"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<script> + test_valid_selector(':is(ul,ol,.list) > [hidden]', + ':is(ul, ol, .list) > [hidden]'); + test_valid_selector(':is(:hover,:focus)', + ':is(:hover, :focus)'); + test_valid_selector('a:is(:not(:hover))'); + + test_valid_selector(':is(#a)'); + test_valid_selector('.a.b ~ :is(.c.d ~ .e.f)'); + test_valid_selector('.a.b ~ .c.d:is(span.e + .f, .g.h > .i.j .k)'); +</script> diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/not.html b/tests/wpt/web-platform-tests/css/selectors/parsing/not.html new file mode 100644 index 00000000000..3895683d1c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/parsing/not.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Selectors: The negation pseudo-class</title> +<link rel="help" href="https://drafts.csswg.org/selectors-3/#negation"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<script> + test_valid_selector('button:not([disabled])'); + test_valid_selector('*:not(foo)', + ['*:not(foo)', ':not(foo)']); + test_valid_selector(':not(:link):not(:visited)'); + test_valid_selector('*|*:not(*)', ':not(*)'); + test_valid_selector(':not(:hover)'); + test_valid_selector(':not(*|*)', ':not(*)'); + test_valid_selector('foo:not(bar)'); +</script> diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/sibling.html b/tests/wpt/web-platform-tests/css/selectors/parsing/sibling.html new file mode 100644 index 00000000000..4f7a7a3fbcc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/parsing/sibling.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Selectors: Sibling combinators</title> +<link rel="help" href="https://drafts.csswg.org/selectors-3/#sibling-combinators"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<script> + test_valid_selector('math + p'); + test_valid_selector('h1.opener + h2'); + test_valid_selector('h1 ~ pre'); +</script> diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/universal.html b/tests/wpt/web-platform-tests/css/selectors/parsing/universal.html new file mode 100644 index 00000000000..e944a93f12c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/parsing/universal.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Selectors: Universal selector</title> +<link rel="help" href="https://drafts.csswg.org/selectors-3/#universal-selector"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<script> + test_valid_selector('*'); + test_valid_selector('div :first-child', + ['div *:first-child', 'div :first-child']); + test_valid_selector('div *:first-child', + ['div *:first-child', 'div :first-child']); +</script> diff --git a/tests/wpt/web-platform-tests/css/selectors/parsing/where.html b/tests/wpt/web-platform-tests/css/selectors/parsing/where.html new file mode 100644 index 00000000000..3a909695709 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/parsing/where.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>CSS Selectors: The Specificity-adjustment Pseudo-class: ':where()'</title> +<link rel="help" href="https://drafts.csswg.org/selectors/#zero-matches"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/css/support/parsing-testcommon.js"></script> +<script> + test_valid_selector(':where(ul,ol,.list) > [hidden]', + ':where(ul, ol, .list) > [hidden]'); + test_valid_selector(':where(:hover,:focus)', + ':where(:hover, :focus)'); + test_valid_selector('a:where(:not(:hover))'); + + test_valid_selector(':where(#a)'); + test_valid_selector('.a.b ~ :where(.c.d ~ .e.f)'); + test_valid_selector('.a.b ~ .c.d:where(span.e + .f, .g.h > .i.j .k)'); +</script> diff --git a/tests/wpt/web-platform-tests/custom-elements/form-associated/form-elements-namedItem.html b/tests/wpt/web-platform-tests/custom-elements/form-associated/form-elements-namedItem.html new file mode 100644 index 00000000000..385d0f281d1 --- /dev/null +++ b/tests/wpt/web-platform-tests/custom-elements/form-associated/form-elements-namedItem.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<script> +customElements.define('custom-input', class extends HTMLElement { + static get formAssociated() {return true;} +}); +</script> + +<form> + <custom-input id="custom-1" name="alone"></custom-input> + <custom-input id="custom-2" name="group"></custom-input> + <custom-input id="custom-3" name="group"></custom-input> +</form> + +<script> +test(() => { + const formElements = document.forms[0].elements; + assert_equals(formElements['invalid'],undefined); + assert_equals(formElements['alone'],document.getElementById('custom-1'),'Single input should be returned as-is'); + assert_true(formElements['group'] instanceof RadioNodeList,'Repeated names should result in RadioNodeList'); + const expected = [document.getElementById('custom-2'), + document.getElementById('custom-3')]; + assert_array_equals(formElements['group'],expected,'Repeated names should be contained in RadioNodeList, in tree order'); +}, 'Form associated custom elements should work with document.forms.elements.namedItem()'); + +</script> +</body>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/encoding/idlharness.any.js b/tests/wpt/web-platform-tests/encoding/idlharness.any.js index 7a057f14e3a..acd100c43b4 100644 --- a/tests/wpt/web-platform-tests/encoding/idlharness.any.js +++ b/tests/wpt/web-platform-tests/encoding/idlharness.any.js @@ -4,7 +4,7 @@ idl_test( ['encoding'], - [], // No deps + ['streams'], idl_array => { idl_array.add_objects({ TextEncoder: ['new TextEncoder()'], diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/network-partition-key.html b/tests/wpt/web-platform-tests/fetch/connection-pool/network-partition-key.html new file mode 100644 index 00000000000..60a784cd84e --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/connection-pool/network-partition-key.html @@ -0,0 +1,264 @@ +<!doctype html> +<html> +<head> + <meta charset="utf-8"> + <title>Connection partitioning by site</title> + <meta name="help" href="https://fetch.spec.whatwg.org/#network-partition-keys"> + <meta name="timeout" content="long"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/common/utils.js"></script> + <script src="/common/get-host-info.sub.js"></script> +</head> +<body> +<!-- Used to open about:blank tabs from opaque origins --> +<iframe id="iframe0" sandbox="allow-popups allow-scripts allow-popups-to-escape-sandbox"></iframe> +<iframe id="iframe1" sandbox="allow-popups allow-scripts allow-popups-to-escape-sandbox"></iframe> +<script> +const host = get_host_info(); + +// These two origins must correspond to different sites for this test to pass. +const POPUP_ORIGINS = [ + host.ORIGIN, + host.HTTP_NOTSAMESITE_ORIGIN +]; + +// This origin should ideally correspond to a different site from the two above, but the +// tests will still pass if it matches the site of one of the other two origins. +const OTHER_ORIGIN = host.REMOTE_ORIGIN; + +// Except for the csp_sandbox and about:blanks, each test opens up two windows, one at +// POPUP_ORIGINS[0], one at POPUP_ORIGINS[1], and has them request subresources from +// subresource_origin. All requests (HTML, JS, and fetch requests) for each window go +// through network-partition-key.py and have a partition_id parameter, which is used +// to check if any request for one window uses the same socket as a request for the +// other window. +// +// Whenever requests from the two different popup windows use the same connection, the +// fetch requests all start returning 400 errors, but other requests will continue to +// succeed, to make for clearer errors. +// +// include_credentials indicates whether the fetch requests use credentials or not, +// which is interesting as uncredentialed sockets have separate connection pools. +const tests = [ + { + name: 'With credentials', + subresource_origin: POPUP_ORIGINS[0], + include_credentials: true, + popup_params: [ + {type: 'main_frame'}, + {type: 'main_frame'} + ] + }, + { + name: 'Without credentials', + subresource_origin: POPUP_ORIGINS[0], + include_credentials: false, + popup_params: [ + {type: 'main_frame'}, + {type: 'main_frame'} + ] + }, + { + name: 'Cross-site resources with credentials', + subresource_origin: OTHER_ORIGIN, + include_credentials: true, + popup_params: [ + {type: 'main_frame'}, + {type: 'main_frame'} + ] + }, + { + name: 'Cross-site resources without credentials', + subresource_origin: OTHER_ORIGIN, + include_credentials: false, + popup_params: [ + {type: 'main_frame'}, + {type: 'main_frame'} + ] + }, + { + name: 'Iframes', + subresource_origin: OTHER_ORIGIN, + include_credentials: true, + popup_params: [ + { + type: 'iframe', + iframe_origin: OTHER_ORIGIN + }, + { + type: 'iframe', + iframe_origin: OTHER_ORIGIN + } + ] + }, + { + name: 'Workers', + subresource_origin: POPUP_ORIGINS[0], + include_credentials: true, + popup_params: [ + {type: 'worker'}, + {type: 'worker'} + ] + }, + { + name: 'Workers with cross-site resources', + subresource_origin: OTHER_ORIGIN, + include_credentials: true, + popup_params: [ + {type: 'worker'}, + {type: 'worker'} + ] + }, + { + name: 'CSP sandbox', + subresource_origin: POPUP_ORIGINS[0], + include_credentials: true, + popup_params: [ + {type: 'csp_sandbox'}, + {type: 'csp_sandbox'} + ] + }, + { + name: 'about:blank from opaque origin iframe', + subresource_origin: OTHER_ORIGIN, + include_credentials: true, + popup_params: [ + {type: 'opaque_about_blank'}, + {type: 'opaque_about_blank'} + ] + }, +]; + +const BASE_PATH = window.location.pathname.replace(/\/[^\/]*$/, '/'); + +function create_script_url(origin, uuid, partition_id, dispatch) { + return `${origin}${BASE_PATH}resources/network-partition-key.py?uuid=${uuid}&partition_id=${partition_id}&dispatch=${dispatch}` +} + +function run_test(test) { + var uuid = token(); + + // Used to track the opened popup windows, so they can be closed at the end of the test. + // They could be closed immediately after use, but safest to keep them open, as browsers + // could use closing a window as a hint to close idle sockets that the window used. + var popup_windows = []; + + // Creates a popup window at |url| and waits for a test result. Returns a promise. + function create_popup_and_wait_for_result(url) { + return new Promise(function(resolve, reject) { + popup_windows.push(window.open(url)); + // Listen for the result + function message_listener(event) { + if (event.data.result === 'success') { + resolve(); + } else if (event.data.result === 'error') { + reject(event.data.details); + } else { + reject('Unexpected message.'); + } + } + window.addEventListener('message', message_listener, {once: 'true'}); + }); + } + + // Navigates iframe to url and waits for a test result. Returns a promise. + function navigate_iframe_and_wait_for_result(iframe, url) { + return new Promise(function(resolve, reject) { + iframe.src = url; + // Listen for the result + function message_listener(event) { + if (event.data.result === 'success') { + resolve(); + } else if (event.data.result === 'error') { + reject(event.data.details); + } else { + reject('Unexpected message.'); + } + } + window.addEventListener('message', message_listener, {once: 'true'}); + }); + } + + function make_test_function(test, index) { + var popup_params = test.popup_params[index]; + return function() { + var popup_path; + var additional_url_params = ''; + var origin = POPUP_ORIGINS[index]; + var partition_id = POPUP_ORIGINS[index]; + if (popup_params.type == 'main_frame') { + popup_path = 'resources/network-partition-checker.html'; + } else if (popup_params.type == 'iframe') { + popup_path = 'resources/network-partition-iframe-checker.html'; + additional_url_params = `&other_origin=${popup_params.iframe_origin}`; + } else if (popup_params.type == 'worker') { + popup_path = 'resources/network-partition-worker-checker.html'; + // The origin of the dedicated worker must mutch the page that loads it. + additional_url_params = `&other_origin=${POPUP_ORIGINS[index]}`; + } else if (popup_params.type == 'csp_sandbox') { + // For the Content-Security-Policy sandbox test, all requests are from the same origin, but + // the origin should be treated as an opaque origin, so sockets should not be reused. + origin = test.subresource_origin; + partition_id = index; + popup_path = 'resources/network-partition-checker.html'; + // Don't check partition of root document, since the document isn't sandboxed until the + // root document is fetched. + additional_url_params = '&sandbox=true&nocheck_partition=true' + } else if (popup_params.type=='opaque_about_blank') { + popup_path = 'resources/network-partition-about-blank-checker.html'; + } else if (popup_params.type == 'iframe') { + throw 'Unrecognized popup_params.type.'; + } + var url = create_script_url(origin, uuid, partition_id, 'fetch_file'); + url += `&subresource_origin=${test.subresource_origin}` + url += `&include_credentials=${test.include_credentials}` + url += `&path=${BASE_PATH.substring(1)}${popup_path}`; + url += additional_url_params; + + if (popup_params.type=='opaque_about_blank') { + return navigate_iframe_and_wait_for_result(iframe = document.getElementById('iframe' + index), url); + } + + return create_popup_and_wait_for_result(url); + } + } + + // Takes a Promise, and cleans up state when the promise has completed, successfully or not, re-throwing + // any exception from the passed in Promise. + async function clean_up_when_done(promise) { + var error; + try { + await promise; + } catch (e) { + error = e; + } + + popup_windows.map(function (win) { win.close(); }); + + try { + var cleanup_url = create_script_url(host.ORIGIN, uuid, host.ORIGIN, 'clean_up'); + var response = await fetch(cleanup_url, {credentials: 'omit', mode: 'cors'}); + assert_equals(await response.text(), 'cleanup complete', `Sever state cleanup failed`); + } catch (e) { + // Prefer error from the passed in Promise over errors from the fetch request to clean up server state. + error = error || e; + } + if (error) + throw error; + } + + return clean_up_when_done( + make_test_function(test, 0)() + .then(make_test_function(test, 1))); +} + +tests.forEach(function (test) { + promise_test( + function() { return run_test(test); }, + test.name); +}) + +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-checker.html b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-checker.html new file mode 100644 index 00000000000..b058f611242 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-checker.html @@ -0,0 +1,30 @@ +<!doctype html> +<html> +<head> + <meta charset="utf-8"> + <title>Network Partition Checker</title> + <meta name="help" href="https://fetch.spec.whatwg.org/#network-partition-keys"> + <meta name="timeout" content="normal"> + <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=common/utils.js"></script> + <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=resources/testharness.js"></script> + <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=fetch/connection-pool/resources/network-partition-key.js"></script> +</head> +<body> +<script> + async function fetch_and_reply() { + // If this is a top level window, report to the opener. Otherwise, this is an iframe, + // so report to the parent. + var report_to = window.opener; + if (!report_to) + report_to = window.parent; + try { + await check_partition_ids(); + report_to.postMessage({result: 'success'}, '*'); + } catch (e) { + report_to.postMessage({result: 'error', details: e.message}, '*'); + } + } + fetch_and_reply(); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-iframe-checker.html b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-iframe-checker.html new file mode 100644 index 00000000000..f76ed184471 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-iframe-checker.html @@ -0,0 +1,22 @@ +<!doctype html> +<html> +<head> + <meta charset="utf-8"> + <title>Iframe Network Partition Checker</title> + <meta name="help" href="https://fetch.spec.whatwg.org/#network-partition-keys"> + <meta name="timeout" content="normal"> + <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=common/utils.js"></script> + <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=resources/testharness.js"></script> + <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=fetch/connection-pool/resources/network-partition-key.js"></script> +</head> +<body> +<script> + // Listen for first message from the iframe, and pass it back to the opener. + function message_listener(event) { + window.opener.postMessage(event.data, '*'); + } + window.addEventListener('message', message_listener, {once: 'true'}); +</script> +<iframe src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=fetch/connection-pool/resources/network-partition-checker.html"></iframe> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.js b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.js new file mode 100644 index 00000000000..bd66109380f --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.js @@ -0,0 +1,47 @@ +// Runs multiple fetches that validate connections see only a single partition_id. +// Requests are run in parallel so that they use multiple connections to maximize the +// chance of exercising all matching connections in the connection pool. Only returns +// once all requests have completed to make cleaning up server state non-racy. +function check_partition_ids(location) { + const NUM_FETCHES = 20; + + var base_url = 'SUBRESOURCE_PREFIX:&dispatch=check_partition'; + + // Not a perfect parse of the query string, but good enough for this test. + var include_credentials = base_url.search('include_credentials=true') != -1; + var exclude_credentials = base_url.search('include_credentials=false') != -1; + if (include_credentials != !exclude_credentials) + throw new Exception('Credentials mode not specified'); + + + // Run NUM_FETCHES in parallel. + var fetches = []; + for (i = 0; i < NUM_FETCHES; ++i) { + var fetch_params = { + credentials: 'omit', + mode: 'cors', + headers: { + 'Header-To-Force-CORS': 'cors' + }, + }; + + // Use a unique URL for each request, in case the caching layer serializes multiple + // requests for the same URL. + var url = `${base_url}&${token()}`; + + fetches.push(fetch(url, fetch_params).then( + function (response) { + return response.text().then(function(text) { + assert_equals(text, 'ok', `Socket unexpectedly reused`); + }); + })); + } + + // Wait for all promises to complete. + return Promise.allSettled(fetches).then(function (results) { + results.forEach(function (result) { + if (result.status != 'fulfilled') + throw result.reason; + }); + }); +} diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.py b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.py new file mode 100644 index 00000000000..44ddae7a75d --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-key.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python + +import datetime +import json +import mimetypes +import os +import sys +import time + +# Test server that tracks the last partition_id was used with each connection for each uuid, and +# lets consumers query if multiple different partition_ids have been been used for any socket. +# +# Server assumes that ports aren't reused, so a client address and a server port uniquely identify +# a connection. If that constraint is ever violated, the test will be flaky. No sockets being +# closed for the duration of the test is sufficient to ensure that, though even if sockets are +# closed, the OS should generally prefer to use new ports for new connections, if any are +# available. +def main(request, response): + response.headers.set(b"Cache-Control", b"no-store") + dispatch = request.GET.first(b"dispatch", None) + uuid = request.GET.first(b"uuid", None) + partition_id = request.GET.first(b"partition_id", None) + + if not uuid or not dispatch or not partition_id: + return simple_response(request, response, 404, b"Not found", b"Invalid query parameters") + + # Unless nocheck_partition is true, check partition_id against server_state, and update server_state. + stash = request.server.stash + test_failed = False + if request.GET.first(b"nocheck_partition", None) != "True": + # Need to grab the lock to access the Stash, since requests are made in parallel. + with stash.lock: + # Don't use server hostname here, since H2 allows multiple hosts to reuse a connection. + # Server IP is not currently available, unfortunately. + address_key = str(request.client_address) + "|" + str(request.url_parts.port) + server_state = stash.take(uuid) or { "test_failed": False } + if address_key in server_state and server_state[address_key] != partition_id: + server_state["test_failed"] = True + server_state[address_key] = partition_id + test_failed = server_state["test_failed"] + stash.put(uuid, server_state) + + origin = request.headers.get(b"Origin") + if origin: + response.headers.set(b"Access-Control-Allow-Origin", origin) + response.headers.set(b"Access-Control-Allow-Credentials", b"true") + + if request.method == u"OPTIONS": + return handle_preflight(request, response) + + if dispatch == u"fetch_file": + return handle_fetch_file(request, response, partition_id, uuid) + + if dispatch == u"check_partition": + if test_failed: + return simple_response(request, response, 200, b"OK", b"Multiple partition IDs used on a socket") + return simple_response(request, response, 200, b"OK", b"ok") + + if dispatch == u"clean_up": + stash.take(uuid) + if test_failed: + return simple_response(request, response, 200, b"OK", b"Test failed, but cleanup completed.") + return simple_response(request, response, 200, b"OK", b"cleanup complete") + + return simple_response(request, response, 404, b"Not Found", b"Unrecognized dispatch parameter: " + dispatch) + +def handle_preflight(request, response): + response.status = (200, b"OK") + response.headers.set(b"Access-Control-Allow-Methods", b"GET") + response.headers.set(b"Access-Control-Allow-Headers", b"header-to-force-cors") + response.headers.set(b"Access-Control-Max-Age", b"86400") + return b"Preflight request" + +def simple_response(request, response, status_code, status_message, body, content_type="text/plain"): + response.status = (status_code, status_message) + response.headers.set(b"Content-Type", content_type) + return body + +def handle_fetch_file(request, response, partition_id, uuid): + subresource_origin = request.GET.first(b"subresource_origin", None) + rel_path = request.GET.first(b"path", None) + + # This needs to be passed on to subresources so they all have access to it. + include_credentials = request.GET.first(b"include_credentials", None) + if not subresource_origin or not rel_path or not include_credentials: + return simple_response(request, response, 404, b"Not found", b"Invalid query parameters") + + cur_path = os.path.realpath(__file__) + base_path = os.path.abspath(os.path.join(os.path.dirname(cur_path), os.pardir, os.pardir, os.pardir)) + path = os.path.abspath(os.path.join(base_path, rel_path)) + + # Basic security check. + if not path.startswith(base_path): + return simple_response(request, response, 404, b"Not found", b"Invalid path") + + sandbox = request.GET.first(b"sandbox", None) + if sandbox == "true": + response.headers.set(b"Content-Security-Policy", "sandbox allow-scripts") + + file = open(path, mode="r") + body = file.read() + file.close() + + subresource_path = "/" + os.path.relpath(__file__, base_path).replace('\\','/') + subresource_params = "?partition_id=" + partition_id + "&uuid=" + uuid + "&subresource_origin=" + subresource_origin + "&include_credentials=" + include_credentials + body = body.replace("SUBRESOURCE_PREFIX:", subresource_origin + subresource_path + subresource_params) + + other_origin = request.GET.first(b"other_origin", None) + if other_origin: + body = body.replace("OTHER_PREFIX:", other_origin + subresource_path + subresource_params) + + mimetypes.init() + mimetype_pair = mimetypes.guess_type(path) + mimetype = mimetype_pair[0] + + if mimetype == None or mimetype_pair[1] != None: + return simple_response(request, response, 500, b"Server Error", b"Unknown MIME type") + return simple_response(request, response, 200, b"OK", body, mimetype) diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker-checker.html b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker-checker.html new file mode 100644 index 00000000000..e6b7ea7673f --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker-checker.html @@ -0,0 +1,24 @@ +<!doctype html> +<html> +<head> + <meta charset="utf-8"> + <title>Worker Network Partition Checker</title> + <meta name="help" href="https://fetch.spec.whatwg.org/#network-partition-keys"> + <meta name="timeout" content="normal"> + <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=common/utils.js"></script> + <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=resources/testharness.js"></script> + <script src="SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=fetch/connection-pool/resources/network-partition-key.js"></script> +</head> +<body> +<script> + // Workers must be same origin as the page loading them, but it's simpler to reuse the + // OTHER_PREFIX mechanism in the Python code than to craft the URL in Javascript here. + var worker = new Worker('OTHER_PREFIX:&dispatch=fetch_file&path=fetch/connection-pool/resources/network-partition-worker.js'); + function message_listener(event) { + window.opener.postMessage(event.data, '*'); + worker.terminate(); + } + worker.addEventListener('message', message_listener); +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker.js b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker.js new file mode 100644 index 00000000000..1745edfacb1 --- /dev/null +++ b/tests/wpt/web-platform-tests/fetch/connection-pool/resources/network-partition-worker.js @@ -0,0 +1,15 @@ +// This tests the partition key of fetches to subresouce_origin made by the worker and +// imported scripts from subresource_origin. +importScripts('SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=common/utils.js'); +importScripts('SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=resources/testharness.js'); +importScripts('SUBRESOURCE_PREFIX:&dispatch=fetch_file&path=fetch/connection-pool/resources/network-partition-key.js'); + +async function fetch_and_reply() { + try { + await check_partition_ids(); + self.postMessage({result: 'success'}); + } catch (e) { + self.postMessage({result: 'error', details: e.message}); + } +} +fetch_and_reply(); diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe-contentwindow.html b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe-contentwindow.html new file mode 100644 index 00000000000..b16280acbd7 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe-contentwindow.html @@ -0,0 +1,36 @@ +<!doctype html> +<meta charset=utf-8> +<title>activeElement when focusing different-site iframe's contentWindow</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +setup({explicit_done:true}); +window.onmessage = function(e) { + var actual = e.data; + test(function() { + // Handle trailing events separately to get make it easier to see + // if they are the only deviation from the expection. + var endedWith = false; + if (actual.endsWith(",willspineventloop,")) { + endedWith = true; + actual += "innerbodyfocus,"; + } + assert_false(endedWith, "Should have gotten innerbodyfocus after willspineventloop"); + }, "Check trailing events"); + test(function() { + // This is a Fission oddity + var endedWith = false; + if (actual.endsWith(",willspineventloop,innerbodyfocus,")) { + endedWith = true; + actual += "innerbodyblur,innerbodyfocus,"; + } + assert_true(endedWith, "Should have gotten innerbodyfocus after willspineventloop"); + }, "Check more trailing events"); + test(function() { + assert_equals(actual, "outeronload,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:IFRAME,willspineventloop,innerbodyfocus,innerbodyblur,innerbodyfocus,", 'Check log'); + }, "Check result"); + w.close(); + done(); +}; +var w = window.open("support/activeelement-after-focusing-different-site-iframe-outer-contentwindow.sub.html"); +</script> diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe.html b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe.html new file mode 100644 index 00000000000..b974252555a --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-different-site-iframe.html @@ -0,0 +1,27 @@ +<!doctype html> +<meta charset=utf-8> +<title>activeElement when focusing different-site iframe</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +setup({explicit_done:true}); +window.onmessage = function(e) { + var actual = e.data; + test(function() { + // Handle trailing events separately to get make it easier to see + // if they are the only deviation from the expection. + var endedWith = false; + if (actual.endsWith(",willspineventloop,")) { + endedWith = true; + actual += "innerbodyfocus,innerbodyblur,"; + } + assert_false(endedWith, "Should have gotten innerbodyfocus,innerbodyblur after willspineventloop"); + }, "Check trailing events"); + test(function() { + assert_equals(actual, "outeronload,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:BODY,willspineventloop,innerbodyfocus,innerbodyblur,", 'Check log'); + }, "Check result"); + w.close(); + done(); +}; +var w = window.open("support/activeelement-after-focusing-different-site-iframe-outer.sub.html"); +</script> diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe-contentwindow.html b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe-contentwindow.html new file mode 100644 index 00000000000..b4a14e721f8 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe-contentwindow.html @@ -0,0 +1,27 @@ +<!doctype html> +<meta charset=utf-8> +<title>activeElement when focusing same-site iframe's contentWindow</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +setup({explicit_done:true}); +window.onmessage = function(e) { + var actual = e.data; + test(function() { + // Handle trailing events separately to get make it easier to see + // if they are the only deviation from the expection. + var endedWith = false; + if (actual.endsWith(",willspineventloop,")) { + endedWith = true; + actual += "innerbodyfocus,"; + } + assert_false(endedWith, "Should have gotten innerbodyfocus after willspineventloop"); + }, "Check trailing events"); + test(function() { + assert_equals(actual, "outeronload,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:IFRAME,willspineventloop,innerbodyfocus,", 'Check log'); + }, "Check result"); + w.close(); + done(); +}; +var w = window.open("support/activeelement-after-focusing-same-site-iframe-outer-contentwindow.html"); +</script> diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe.html b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe.html new file mode 100644 index 00000000000..55918ebf07f --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/activeelement-after-focusing-same-site-iframe.html @@ -0,0 +1,27 @@ +<!doctype html> +<meta charset=utf-8> +<title>activeElement when focusing same-site iframe</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +setup({explicit_done:true}); +window.onmessage = function(e) { + var actual = e.data; + test(function() { + // Handle trailing events separately to get make it easier to see + // if they are the only deviation from the expection. + var endedWith = false; + if (actual.endsWith(",willspineventloop,")) { + endedWith = true; + actual += "innerbodyfocus,innerbodyblur,"; + } + assert_false(endedWith, "Should have gotten innerbodyfocus,innerbodyblur after willspineventloop"); + }, "Check trailing events"); + test(function() { + assert_equals(actual, "outeronload,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:BODY,willspineventloop,innerbodyfocus,innerbodyblur,", 'Check log'); + }, "Check result"); + w.close(); + done(); +}; +var w = window.open("support/activeelement-after-focusing-same-site-iframe-outer.html"); +</script> diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe-contentwindow.html b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe-contentwindow.html new file mode 100644 index 00000000000..4cb3c68db63 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe-contentwindow.html @@ -0,0 +1,27 @@ +<!doctype html> +<meta charset=utf-8> +<title>activeElement when immediately focusing different-site iframe's contentWindow</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +setup({explicit_done:true}); +window.onmessage = function(e) { + var actual = e.data; + test(function() { + // Make the difference between Firefox and Chrome visible separately + // from the comparison of the entire log string failing to match. + var endedWith = false; + if (actual.endsWith(",willspineventloop,")) { + endedWith = true; + actual += "innerbodyfocus,"; + } + assert_true(endedWith, "Should not have gotten innerbodyfocus after willspineventloop"); + }, "Check trailing events"); + test(function() { + assert_equals(actual, "outerparser,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:IFRAME,willspineventloop,innerbodyfocus,", 'Check log'); + }, "Check result"); + w.close(); + done(); +}; +var w = window.open("support/activeelement-after-immediately-focusing-different-site-iframe-outer-contentwindow.sub.html"); +</script> diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe.html b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe.html new file mode 100644 index 00000000000..67bf733bc1e --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-different-site-iframe.html @@ -0,0 +1,16 @@ +<!doctype html> +<meta charset=utf-8> +<title>activeElement when immediately focusing different-site iframe</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +setup({explicit_done:true}); +window.onmessage = function(e) { + test(function() { + assert_equals(e.data, "outerparser,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:BODY,willspineventloop,", 'Check log'); + }, "Check result"); + w.close(); + done(); +}; +var w = window.open("support/activeelement-after-immediately-focusing-different-site-iframe-outer.sub.html"); +</script> diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe-contentwindow.html b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe-contentwindow.html new file mode 100644 index 00000000000..81dbfd28d03 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe-contentwindow.html @@ -0,0 +1,27 @@ +<!doctype html> +<meta charset=utf-8> +<title>activeElement when immediately focusing same-site iframe's contentWindow</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +setup({explicit_done:true}); +window.onmessage = function(e) { + var actual = e.data; + test(function() { + // Make the difference between Firefox and Chrome visible separately + // from the comparison of the entire log string failing to match. + var endedWith = false; + if (actual.endsWith(",willspineventloop,")) { + endedWith = true; + actual += "innerbodyfocus,"; + } + assert_true(endedWith, "Should not have gotten innerbodyfocus after willspineventloop"); + }, "Check trailing events"); + test(function() { + assert_equals(actual, "outerparse,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:IFRAME,willspineventloop,innerbodyfocus,", 'Check log'); + }, "Check result"); + w.close(); + done(); +}; +var w = window.open("support/activeelement-after-immediately-focusing-same-site-iframe-outer-contentwindow.html"); +</script> diff --git a/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe.html b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe.html new file mode 100644 index 00000000000..a035af072d3 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/activeelement-after-immediately-focusing-same-site-iframe.html @@ -0,0 +1,16 @@ +<!doctype html> +<meta charset=utf-8> +<title>activeElement when immediately focusing same-site iframe</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +setup({explicit_done:true}); +window.onmessage = function(e) { + test(function() { + assert_equals(e.data, "outerparse,activeElement:BODY,willfocusiframe,didfocusiframe,activeElement:IFRAME,willbluriframe,didbluriframe,activeElement:BODY,willspineventloop,", 'Check log'); + }, "Check result"); + w.close(); + done(); +}; +var w = window.open("support/activeelement-after-immediately-focusing-same-site-iframe-outer.html"); +</script> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner-contentwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner-contentwindow.html new file mode 100644 index 00000000000..bc78e6e0538 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner-contentwindow.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Inner document</title> +</head> +<body> +<h1>Inner</h1> +<script> +document.body.onfocus = function() { + parent.postMessage("innerbodyfocus,", "*"); +} +document.body.onblur = function() { + parent.postMessage("innerbodyblur,", "*"); +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner.html new file mode 100644 index 00000000000..bc78e6e0538 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-inner.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Inner document</title> +</head> +<body> +<h1>Inner</h1> +<script> +document.body.onfocus = function() { + parent.postMessage("innerbodyfocus,", "*"); +} +document.body.onblur = function() { + parent.postMessage("innerbodyblur,", "*"); +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer-contentwindow.sub.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer-contentwindow.sub.html new file mode 100644 index 00000000000..fd66cbaa55c --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer-contentwindow.sub.html @@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf-8"> +<title>activeElement when focusing different-site iframe's contenWindow</title> +<script> +let log = ""; +function getLog() { + return log; +} +window.onmessage = function(e) { + log += e.data; +}; +window.onload = function() { + log += "outeronload,"; + log += "activeElement:" + document.activeElement.tagName + ","; + log += "willfocusiframe,"; + document.getElementsByTagName("iframe")[0].contentWindow.focus(); + log += "didfocusiframe,"; + log += "activeElement:" + document.activeElement.tagName + ","; + log += "willbluriframe,"; + document.getElementsByTagName("iframe")[0].contentWindow.blur(); + log += "didbluriframe,"; + log += "activeElement:" + document.activeElement.tagName + ","; + log += "willspineventloop," + opener.step_timeout(function() { + opener.postMessage(getLog(), "*"); + }, 1500); +} +</script> +<iframe src="http://{{hosts[alt][www]}}:{{ports[http][0]}}/focus/support/activeelement-after-focusing-different-site-iframe-inner-contentwindow.html"></iframe> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer.sub.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer.sub.html new file mode 100644 index 00000000000..bcbedb2f74e --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-different-site-iframe-outer.sub.html @@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf-8"> +<title>activeElement when focusing different-site iframe</title> +<script> +let log = ""; +function getLog() { + return log; +} +window.onmessage = function(e) { + log += e.data; +}; +window.onload = function() { + log += "outeronload,"; + log += "activeElement:" + document.activeElement.tagName + ","; + log += "willfocusiframe,"; + document.getElementsByTagName("iframe")[0].focus(); + log += "didfocusiframe,"; + log += "activeElement:" + document.activeElement.tagName + ","; + log += "willbluriframe,"; + document.getElementsByTagName("iframe")[0].blur(); + log += "didbluriframe,"; + log += "activeElement:" + document.activeElement.tagName + ","; + log += "willspineventloop," + opener.step_timeout(function() { + opener.postMessage(getLog(), "*"); + }, 1500); +} +</script> +<iframe src="http://{{hosts[alt][www]}}:{{ports[http][0]}}/focus/support/activeelement-after-focusing-different-site-iframe-inner.html"></iframe> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner-contentwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner-contentwindow.html new file mode 100644 index 00000000000..bc78e6e0538 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner-contentwindow.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Inner document</title> +</head> +<body> +<h1>Inner</h1> +<script> +document.body.onfocus = function() { + parent.postMessage("innerbodyfocus,", "*"); +} +document.body.onblur = function() { + parent.postMessage("innerbodyblur,", "*"); +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner.html new file mode 100644 index 00000000000..bc78e6e0538 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-inner.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Inner document</title> +</head> +<body> +<h1>Inner</h1> +<script> +document.body.onfocus = function() { + parent.postMessage("innerbodyfocus,", "*"); +} +document.body.onblur = function() { + parent.postMessage("innerbodyblur,", "*"); +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer-contentwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer-contentwindow.html new file mode 100644 index 00000000000..63e2ac60196 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer-contentwindow.html @@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf-8"> +<title>activeElement when focusing same-site iframe's contentWindow</title> +<script> +let log = ""; +function getLog() { + return log; +} +window.onmessage = function(e) { + log += e.data; +}; +window.onload = function() { + log += "outeronload,"; + log += "activeElement:" + document.activeElement.tagName + ","; + log += "willfocusiframe,"; + document.getElementsByTagName("iframe")[0].contentWindow.focus(); + log += "didfocusiframe,"; + log += "activeElement:" + document.activeElement.tagName + ","; + log += "willbluriframe,"; + document.getElementsByTagName("iframe")[0].contentWindow.blur(); + log += "didbluriframe,"; + log += "activeElement:" + document.activeElement.tagName + ","; + log += "willspineventloop," + opener.step_timeout(function() { + opener.postMessage(getLog(), "*"); + }, 1500); +} +</script> +<iframe src="activeelement-after-focusing-same-site-iframe-inner-contentwindow.html"></iframe> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer.html new file mode 100644 index 00000000000..333b436ea11 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-focusing-same-site-iframe-outer.html @@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf-8"> +<title>activeElement when focusing same-site iframe</title> +<script> +let log = ""; +function getLog() { + return log; +} +window.onmessage = function(e) { + log += e.data; +}; +window.onload = function() { + log += "outeronload,"; + log += "activeElement:" + document.activeElement.tagName + ","; + log += "willfocusiframe,"; + document.getElementsByTagName("iframe")[0].focus(); + log += "didfocusiframe,"; + log += "activeElement:" + document.activeElement.tagName + ","; + log += "willbluriframe,"; + document.getElementsByTagName("iframe")[0].blur(); + log += "didbluriframe,"; + log += "activeElement:" + document.activeElement.tagName + ","; + log += "willspineventloop," + opener.step_timeout(function() { + opener.postMessage(getLog(), "*"); + }, 1500); +} +</script> +<iframe src="activeelement-after-focusing-same-site-iframe-inner.html"></iframe> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner-contentwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner-contentwindow.html new file mode 100644 index 00000000000..bc78e6e0538 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner-contentwindow.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Inner document</title> +</head> +<body> +<h1>Inner</h1> +<script> +document.body.onfocus = function() { + parent.postMessage("innerbodyfocus,", "*"); +} +document.body.onblur = function() { + parent.postMessage("innerbodyblur,", "*"); +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner.html new file mode 100644 index 00000000000..bc78e6e0538 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Inner document</title> +</head> +<body> +<h1>Inner</h1> +<script> +document.body.onfocus = function() { + parent.postMessage("innerbodyfocus,", "*"); +} +document.body.onblur = function() { + parent.postMessage("innerbodyblur,", "*"); +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer-contentwindow.sub.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer-contentwindow.sub.html new file mode 100644 index 00000000000..10240504fe9 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer-contentwindow.sub.html @@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf-8"> +<title>activeElement when immediately focusing different-site iframe's contentWindow</title> +<script> +let log = ""; +function getLog() { + return log; +} +window.onmessage = function(e) { + log += e.data; +}; +</script> +<iframe src="http://{{hosts[alt][www]}}:{{ports[http][0]}}/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner-contentwindow.html"></iframe> +<script> +log += "outerparser,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willfocusiframe,"; +document.getElementsByTagName("iframe")[0].contentWindow.focus(); +log += "didfocusiframe,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willbluriframe,"; +document.getElementsByTagName("iframe")[0].contentWindow.blur(); +log += "didbluriframe,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willspineventloop," +opener.step_timeout(function() { + opener.postMessage(getLog(), "*"); +}, 1500); +</script> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer.sub.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer.sub.html new file mode 100644 index 00000000000..3485f1b8e4b --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-different-site-iframe-outer.sub.html @@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf-8"> +<title>activeElement when immediately focusing different-site iframe</title> +<script> +let log = ""; +function getLog() { + return log; +} +window.onmessage = function(e) { + log += e.data; +}; +</script> +<iframe src="http://{{hosts[alt][www]}}:{{ports[http][0]}}/focus/support/activeelement-after-immediately-focusing-different-site-iframe-inner.html"></iframe> +<script> +log += "outerparser,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willfocusiframe,"; +document.getElementsByTagName("iframe")[0].focus(); +log += "didfocusiframe,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willbluriframe,"; +document.getElementsByTagName("iframe")[0].blur(); +log += "didbluriframe,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willspineventloop," +opener.step_timeout(function() { + opener.postMessage(getLog(), "*"); +}, 1500); +</script> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner-contentwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner-contentwindow.html new file mode 100644 index 00000000000..bc78e6e0538 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner-contentwindow.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Inner document</title> +</head> +<body> +<h1>Inner</h1> +<script> +document.body.onfocus = function() { + parent.postMessage("innerbodyfocus,", "*"); +} +document.body.onblur = function() { + parent.postMessage("innerbodyblur,", "*"); +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner.html new file mode 100644 index 00000000000..bc78e6e0538 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-inner.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>Inner document</title> +</head> +<body> +<h1>Inner</h1> +<script> +document.body.onfocus = function() { + parent.postMessage("innerbodyfocus,", "*"); +} +document.body.onblur = function() { + parent.postMessage("innerbodyblur,", "*"); +} +</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contentwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contentwindow.html new file mode 100644 index 00000000000..3849f6ea2cc --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contentwindow.html @@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf-8"> +<title>activeElement when focusing same-site iframe's contentWindow</title> +<script> +let log = ""; +function getLog() { + return log; +} +window.onmessage = function(e) { + log += e.data; +}; +</script> +<iframe src="activeelement-after-immediately-focusing-same-site-iframe-inner-contentwindow.html"></iframe> +<script> +log += "outerparse,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willfocusiframe,"; +document.getElementsByTagName("iframe")[0].contentWindow.focus(); +log += "didfocusiframe,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willbluriframe,"; +document.getElementsByTagName("iframe")[0].contentWindow.blur(); +log += "didbluriframe,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willspineventloop," +opener.step_timeout(function() { + opener.postMessage(getLog(), "*"); +}, 1500); +</script> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contenwindow.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contenwindow.html new file mode 100644 index 00000000000..bafc26065c8 --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer-contenwindow.html @@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf-8"> +<title>activeElement when focusing same-site iframe's contentWindow</title> +<script> +let log = ""; +function getLog() { + return log; +} +window.onmessage = function(e) { + log += e.data; +}; +</script> +<iframe src="activeelement-after-immediately-focusing-same-site-iframe-inner-contentwindow.html"></iframe> +<script> +log += "outerparse,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willfocusiframe,"; +document.getElementsByTagName("iframe")[0].focus(); +log += "didfocusiframe,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willbluriframe,"; +document.getElementsByTagName("iframe")[0].blur(); +log += "didbluriframe,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willspineventloop," +opener.step_timeout(function() { + opener.postMessage(getLog(), "*"); +}, 1500); +</script> diff --git a/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer.html b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer.html new file mode 100644 index 00000000000..f22fa98076f --- /dev/null +++ b/tests/wpt/web-platform-tests/focus/support/activeelement-after-immediately-focusing-same-site-iframe-outer.html @@ -0,0 +1,29 @@ +<!doctype html> +<meta charset="utf-8"> +<title>activeElement when focusing same-site iframe</title> +<script> +let log = ""; +function getLog() { + return log; +} +window.onmessage = function(e) { + log += e.data; +}; +</script> +<iframe src="activeelement-after-immediately-focusing-same-site-iframe-inner.html"></iframe> +<script> +log += "outerparse,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willfocusiframe,"; +document.getElementsByTagName("iframe")[0].focus(); +log += "didfocusiframe,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willbluriframe,"; +document.getElementsByTagName("iframe")[0].blur(); +log += "didbluriframe,"; +log += "activeElement:" + document.activeElement.tagName + ","; +log += "willspineventloop," +opener.step_timeout(function() { + opener.postMessage(getLog(), "*"); +}, 1500); +</script> diff --git a/tests/wpt/web-platform-tests/focus/support/focus-restoration-in-different-site-iframes-outer.sub.html b/tests/wpt/web-platform-tests/focus/support/focus-restoration-in-different-site-iframes-outer.sub.html index 91ffed11075..ecc1af286d9 100644 --- a/tests/wpt/web-platform-tests/focus/support/focus-restoration-in-different-site-iframes-outer.sub.html +++ b/tests/wpt/web-platform-tests/focus/support/focus-restoration-in-different-site-iframes-outer.sub.html @@ -12,11 +12,11 @@ window.onmessage = function(e) { other = window.open("focus-restoration-in-different-site-iframes-other.html", "otherwindow", "resizable=yes"); } else if (e.data == "other") { other.close(); - setTimeout(function() { + opener.step_timeout(function() { document.getElementsByTagName("iframe")[0].contentWindow.postMessage("getlog", "*"); }, 2000); } else { - setTimeout(function() { + opener.step_timeout(function() { opener.postMessage(getLog() + e.data, "*"); }, 1000); } diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html index 1fe8ac5eaeb..efb2665a8a5 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-colorManaged-convertToBlob-roundtrip.html @@ -78,7 +78,7 @@ function runConvertToBlobTest(testScenario) { var ctx = srcCanvas.getContext('2d', testScenario.canvasColorParam); var compositeOverBlack = (testScenario.encodeOptions.type == "image/jpeg"); drawPatternOnCanvsa(ctx, testScenario.alpha, compositeOverBlack); - var refPixels = ctx.getImageData(0, 0, 2, 2).dataUnion; + var refPixels = ctx.getImageData(0, 0, 2, 2).data; var t = async_test("Test canvas convertToBlob(): " + testScenarioToString(testScenario)); @@ -88,7 +88,7 @@ function runConvertToBlobTest(testScenario) { var dstCanvas = createCanvas(testScenario); var dstCtx = dstCanvas.getContext('2d', testScenario.canvasColorParam); dstCtx.drawImage(image, 0, 0); - var actualPixels = dstCtx.getImageData(0, 0, 2, 2).dataUnion; + var actualPixels = dstCtx.getImageData(0, 0, 2, 2).data; testPixels(actualPixels, refPixels, testScenario); }); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html index 7483800b41e..72b8e278c60 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createImageBitmap-e_srgb.html @@ -43,8 +43,8 @@ function testPixels(ctx, tests, sourceType) if (sourceType === 'video') tolerance = 0.03; for (var i = 0; i < tests.length; i++) { - actual = ctx.getImageData(tests[i][0], tests[i][1], 1, 1).dataUnion; - assert_implements(actual, 'ImageData dataUnion not supported'); + actual = ctx.getImageData(tests[i][0], tests[i][1], 1, 1).data; + assert_implements(actual, 'ImageData data not supported'); expected = tests[i][2]; assert_equals(actual.length, expected.length); for (var j = 0; j < actual.length; j++) @@ -171,10 +171,10 @@ function compareBitmaps(bitmap1, bitmap2) ctx2.clearRect(0, 0, canvas2.width, canvas2.height); ctx1.drawImage(bitmap1, 0, 0); ctx2.drawImage(bitmap2, 0, 0); - var data1 = ctx1.getImageData(0, 0, 50, 50).dataUnion; - assert_implements(data1, 'ImageData dataUnion not supported'); - var data2 = ctx2.getImageData(0, 0, 50, 50).dataUnion; - assert_implements(data2, 'ImageData dataUnion not supported'); + var data1 = ctx1.getImageData(0, 0, 50, 50).data; + assert_implements(data1, 'ImageData data not supported'); + var data2 = ctx2.getImageData(0, 0, 50, 50).data; + assert_implements(data2, 'ImageData data not supported'); var dataMatched = true; for (var i = 0; i < data1.length; i++) { if (data1[i] != data2[i]) { diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createPutGetImageData-colorManaged.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createPutGetImageData-colorManaged.html index f153a983d93..c72dc97cd0c 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createPutGetImageData-colorManaged.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-createPutGetImageData-colorManaged.html @@ -14,7 +14,7 @@ function checkImageData(canvasColorSettings, imageData) { assert_equals(imageData.data.length, 4 * xWidth * xHeight); } else { assert_equals("float32", imageDataColorSettings.storageFormat); - assert_equals(imageData.dataUnion.length, 4 * xWidth * xHeight); + assert_equals(imageData.data.length, 4 * xWidth * xHeight); } } diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html index e7a83fc1f75..9907c4e2cf5 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-draw-high-bit-depth-images.html @@ -29,14 +29,14 @@ function runTest(testScenario) { var refCtx = refCanvas.getContext( '2d', testScenario.canvasColorParams); refCtx.drawImage(_8bitImage, 0, 0); - var refPixels = refCtx.getImageData(0, 0, 2, 2).dataUnion; + var refPixels = refCtx.getImageData(0, 0, 2, 2).data; var testCanvas = document.createElement("canvas"); testCanvas.width = testCanvas.height = 2; var testCtx = testCanvas.getContext( '2d', testScenario.canvasColorParams); testCtx.drawImage(_16bitImage, 0, 0); - var testPixels = testCtx.getImageData(0, 0, 2, 2).dataUnion; + var testPixels = testCtx.getImageData(0, 0, 2, 2).data; assert_array_approx_equals(refPixels, testPixels, tolerance); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-e_srgb.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-e_srgb.html index 7620d93d5f1..0cfa729a60b 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-e_srgb.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-e_srgb.html @@ -16,7 +16,7 @@ function testPixels(ctx, tests) { var actual, expected, tolerance = 0.01; for (var i = 0; i < tests.length; i++) { - actual = ctx.getImageData(tests[i].x, tests[i].y, 1, 1).dataUnion; + actual = ctx.getImageData(tests[i].x, tests[i].y, 1, 1).data; expected = tests[i].color; assert_true(actual.length === expected.length); for (var j = 0; j < actual.length; j++) diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html index 144dca0e775..7edbc5ee3c9 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-drawImage-offscreenCanvas.html @@ -90,8 +90,8 @@ function initializeOffscreenCanvasTransparent(canvasColorSpace, canvasPixelForma function testPixels(testCtx, refCtx, pixelFormat, isTrnasparent) { - var actual = testCtx.getImageData(0, 0, 4, 4).dataUnion; - var expected = refCtx.getImageData(0, 0, 4, 4).dataUnion; + var actual = testCtx.getImageData(0, 0, 4, 4).data; + var expected = refCtx.getImageData(0, 0, 4, 4).data; var tolerance = 4; if (pixelFormat === 'float16') diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-getImageData-e_srgb.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-getImageData-e_srgb.html index c38da7c95c0..73682eb631d 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-getImageData-e_srgb.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-getImageData-e_srgb.html @@ -27,7 +27,7 @@ function drawSRGBThenGetImageData_e_sRGB() { {colorSpace: 'srgb', pixelFormat:'float16'}); ctx.fillStyle = 'rgba(51, 102, 153, 0.8)'; ctx.fillRect(0, 0, 10, 10); - var pixel = ctx.getImageData(5, 5, 1, 1).dataUnion; + var pixel = ctx.getImageData(5, 5, 1, 1).data; // Check against the same color in e-sRGB. 0.01 protects the test against // color conversion deviations. assert_array_approx_equals(pixel, [0.2, 0.4, 0.6, 0.8], 0.01); @@ -41,12 +41,12 @@ function putImageData_e_sRGBThenGetImageData_e_sRGB_InRange() { {colorSpace: 'srgb', pixelFormat:'float16'}) var imageData = ctx.createImageData(1, 1, {colorSpace: 'srgb', storageFormat:'float32'}); - imageData.dataUnion[0] = 0.2; - imageData.dataUnion[1] = 0.4; - imageData.dataUnion[2] = 0.6; - imageData.dataUnion[3] = 0.8; + imageData.data[0] = 0.2; + imageData.data[1] = 0.4; + imageData.data[2] = 0.6; + imageData.data[3] = 0.8; ctx.putImageData(imageData, 5, 5); - var pixel = ctx.getImageData(5, 5, 1, 1).dataUnion; + var pixel = ctx.getImageData(5, 5, 1, 1).data; // Check against the same color in e-sRGB. 0.001 protects the test against // rounding errors. assert_array_approx_equals(pixel, [0.2, 0.4, 0.6, 0.8], 0.01); @@ -60,12 +60,12 @@ function putImageData_e_sRGBThenGetImageData_e_sRGB_OutOfRange() { {colorSpace: 'srgb', pixelFormat:'float16'}) var imageData = ctx.createImageData(1, 1, {colorSpace: 'srgb', storageFormat:'float32'}); - imageData.dataUnion[0] = 1.3; - imageData.dataUnion[1] = -1.13; - imageData.dataUnion[2] = 0.7; - imageData.dataUnion[3] = 1.8; + imageData.data[0] = 1.3; + imageData.data[1] = -1.13; + imageData.data[2] = 0.7; + imageData.data[3] = 1.8; ctx.putImageData(imageData, 5, 5); - var pixel = ctx.getImageData(5, 5, 1, 1).dataUnion; + var pixel = ctx.getImageData(5, 5, 1, 1).data; // Check against the same color in e-sRGB. 0.001 protects the test against // rounding errors. assert_array_approx_equals(pixel, [1.3, -1.13, 0.7, 1.8], 0.01); @@ -85,7 +85,7 @@ function putImageDataSRGBThenGetImageData_e_sRGB() { imageData.data[2] = 153; imageData.data[3] = 204; ctx.putImageData(imageData, 5, 5); - var pixel = ctx.getImageData(5, 5, 1, 1).dataUnion; + var pixel = ctx.getImageData(5, 5, 1, 1).data; // Check against the same color in e-sRGB. 0.01 protects the test against // color conversion deviations. assert_array_approx_equals(pixel, [0.2, 0.4, 0.6, 0.8], 0.01); diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html index dda9f9cc28f..d106904f2e2 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imageData-colorManagedBehavior.html @@ -51,7 +51,7 @@ function checkImageDataColorSettings(canvasColorSettings, imageData) { function checkImageDataColorValues(canvasColorSettings, imageData, isBlank = '', width = xWidth, height = xHeight, isWCG_U8toSRGB_U8 = '') { - var data = imageData.dataUnion; + var data = imageData.data; if (isBlank === 'isBlank') { testBlankPixels(data, width, height); } else { @@ -105,10 +105,10 @@ function PreparePredefinedImageDataObjects() { for (var i = 0; i < xWidth * xHeight; i++) for (var j = 0; j < 4; j++) { - srgbImageDataU8.dataUnion[i*4+j] = srgbPixels[i][j]; - e_srgbImageDataU16.dataUnion[i*4+j] = + srgbImageDataU8.data[i*4+j] = srgbPixels[i][j]; + e_srgbImageDataU16.data[i*4+j] = Math.round(e_srgbPixels[i][j] * 65535); - e_srgbImageDataF32.dataUnion[i*4+j] = e_srgbPixels[i][j]; + e_srgbImageDataF32.data[i*4+j] = e_srgbPixels[i][j]; } } @@ -282,7 +282,7 @@ function runTestCreateImageDataWHC(canvasColorSettings, imageDataColorSettings) imageDataColorSettings.storageFormat, "storageFormat should match"); var blankData = new Array(4 * width * height).fill(0); - assert_array_equals(imageData.dataUnion, blankData, + assert_array_equals(imageData.data, blankData, "ImageData should be transparent black"); } @@ -317,7 +317,7 @@ runTestCreateImageDataWHCTests(); // CanvasColorSpace which is given in imageDataColorSettings. function runTestCreateImageDataDWHC(canvasColorSettings, imageData) { - var data = imageData.dataUnion; + var data = imageData.data; width = xWidth; height = xHeight; var colorSettings = imageData.getColorSettings(); @@ -332,7 +332,7 @@ function runTestCreateImageDataDWHC(canvasColorSettings, imageData) { assert_equals(newColorSettings.storageFormat, colorSettings.storageFormat, "storageFormat should match"); - assert_array_equals(newImageData.dataUnion, imageData.dataUnion, + assert_array_equals(newImageData.data, imageData.data, "ImageData should be transparent black"); } diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imagedata-no-color-settings-crash.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imagedata-no-color-settings-crash.html index d7fe956e4b8..b21eaf72abe 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imagedata-no-color-settings-crash.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/imagedata-no-color-settings-crash.html @@ -10,7 +10,7 @@ test(function() { var imageData = ctx.createImageData(dataFloat32, 1, 1, {}); ctx.putImageData(imageData, 5, 5); - var data = ctx.getImageData(5,5,1,1).dataUnion; + var data = ctx.getImageData(5,5,1,1).data; }, "Putting a float-32 ImageData with no color settings on a context 2D should not crash."); test(function() { @@ -21,6 +21,6 @@ test(function() { var imageData = ctx.createImageData(dataUint16, 1, 1, {}); ctx.putImageData(imageData, 5, 5); - var data = ctx.getImageData(5,5,1,1).dataUnion; + var data = ctx.getImageData(5,5,1,1).data; }, "Putting a uint-16 ImageData with no color settings on a context 2D should not crash."); </script>
\ No newline at end of file diff --git a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/transferFromImageBitmap.html b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/transferFromImageBitmap.html index 6855dc705b7..ff8abeb897f 100644 --- a/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/transferFromImageBitmap.html +++ b/tests/wpt/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/transferFromImageBitmap.html @@ -41,7 +41,7 @@ function generateExpectedResult(testScenario, canvas) ctx.fillRect(0, 1, 1, 1); ctx.fillStyle = generateFillStyle(27, 27, 27, testScenario.alpha); ctx.fillRect(1, 1, 1, 1); - return ctx.getImageData(0, 0, 2, 2).dataUnion; + return ctx.getImageData(0, 0, 2, 2).data; } function generateTestName(testScenario) { @@ -79,7 +79,7 @@ function runTransferFromImageBitmapTest(testScenario) { {colorSpace: testScenario.colorSpace, pixelFormat: testScenario.pixelFormat}); ctx.drawImage(dstCanvas, 0, 0); - var actualPixels = ctx.getImageData(0, 0, 2, 2).dataUnion; + var actualPixels = ctx.getImageData(0, 0, 2, 2).data; testPixels(actualPixels, expectedPixels, testScenario); }); }, generateTestName(testScenario)); diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html index 680cc6af29a..fe42015913b 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-navigation.https.html @@ -110,40 +110,38 @@ for (const testcase of CASES) { function desc(s) { return s === '' ? '(none)' : s; } - async_test(async (t) => { - try { - const targetUrl = REMOTE_FRAME_URL + testcase.target; - const parent = - await loadFrames(t, testcase.parent, withEmptyFrame, targetUrl); - + // These tests are very slow, so they must be run in parallel using + // async_test. + async_test(t => { + const targetUrl = REMOTE_FRAME_URL + testcase.target; + loadFrames(t, testcase.parent, withEmptyFrame, targetUrl) + .then(t.step_func(parent => { const contextUrl = parent.src ? parent.src : 'about:blank'; - const reports = await observeReports(parent.contentWindow); - assert_equals(reports.length, testcase.reports.length); - - for (let i = 0; i < reports.length; i += 1) { - const report = reports[i]; - switch (testcase.reports[i]) { - case 'CORP': - checkCorpReport(report, contextUrl, targetUrl, 'enforce'); - break; - case 'CORP-RO': - checkCorpReport(report, contextUrl, targetUrl, 'reporting'); - break; - case 'NAV': - checkCoepMismatchReport(report, contextUrl, targetUrl, 'enforce'); - break; - case 'NAV-RO': - checkCoepMismatchReport(report, contextUrl, targetUrl, 'reporting'); - break; - default: - assert_unreached( - 'Unexpected report expeaction: ' + testcase.reports[i]); + observeReports(parent.contentWindow).then(t.step_func(reports => { + assert_equals(reports.length, testcase.reports.length); + for (let i = 0; i < reports.length; i += 1) { + const report = reports[i]; + switch (testcase.reports[i]) { + case 'CORP': + checkCorpReport(report, contextUrl, targetUrl, 'enforce'); + break; + case 'CORP-RO': + checkCorpReport(report, contextUrl, targetUrl, 'reporting'); + break; + case 'NAV': + checkCoepMismatchReport(report, contextUrl, targetUrl, 'enforce'); + break; + case 'NAV-RO': + checkCoepMismatchReport(report, contextUrl, targetUrl, 'reporting'); + break; + default: + assert_unreached( + 'Unexpected report expeaction: ' + testcase.reports[i]); + } } - } - t.done(); - } catch (e) { - t.step(() => { throw e; }); - } + t.done(); + })).catch(t.step_func(e => { throw e; })); + })).catch(t.step_func(e => { throw e; })); }, `parent: ${desc(testcase.parent)}, target: ${desc(testcase.target)}, ` + `with empty frame: ${withEmptyFrame}`); } diff --git a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html index 02c719da737..416732497bd 100644 --- a/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html +++ b/tests/wpt/web-platform-tests/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html @@ -77,100 +77,82 @@ function checkNavigationReportExistence(reports, blockedUrl, contextUrl, disposi assert_unreached(`A report whose blockedURL is ${blockedUrl} and url is ${contextUrl} is not found.`); } -async_test(async (t) => { - try { - const iframe = document.createElement('iframe'); - t.add_cleanup(() => iframe.remove()); - - iframe.src = `resources/reporting-empty-frame.html` - document.body.appendChild(iframe); - await new Promise(resolve => { - iframe.addEventListener('load', resolve, {once: true}); - }); - - const url = `${REMOTE_ORIGIN}/common/text-plain.txt?${token()}`; - const init = { mode: 'no-cors', cache: 'no-store' }; - // The response comes from cross-origin, and doesn't have a CORP - // header, so it is blocked. - iframe.contentWindow.fetch(url, init).catch(() => {}); - - // Wait 3 seconds for reports to settle. - await wait(3000); - - checkCorpReportExistence(reports, url, iframe.src, '', 'enforce'); - checkCorpReportExistence( +promise_test(async t => { + const iframe = document.createElement('iframe'); + t.add_cleanup(() => iframe.remove()); + + iframe.src = `resources/reporting-empty-frame.html` + document.body.appendChild(iframe); + await new Promise(resolve => { + iframe.addEventListener('load', resolve, {once: true}); + }); + + const url = `${REMOTE_ORIGIN}/common/text-plain.txt?${token()}`; + const init = { mode: 'no-cors', cache: 'no-store' }; + // The response comes from cross-origin, and doesn't have a CORP + // header, so it is blocked. + iframe.contentWindow.fetch(url, init).catch(() => {}); + + // Wait 3 seconds for reports to settle. + await wait(3000); + + checkCorpReportExistence(reports, url, iframe.src, '', 'enforce'); + checkCorpReportExistence( reportsForReportOnly, url, iframe.src, '', 'reporting'); - - t.done(); - } catch (e) { - t.step(() => { throw e }); - } }, 'subresource CORP'); -async_test(async (t) => { - try { - const iframe = document.createElement('iframe'); - t.add_cleanup(() => iframe.remove()); +promise_test(async t => { + const iframe = document.createElement('iframe'); + t.add_cleanup(() => iframe.remove()); - iframe.src = `resources/reporting-empty-frame.html` - document.body.appendChild(iframe); - await new Promise(resolve => { - iframe.addEventListener('load', resolve, {once: true}); - }); + iframe.src = `resources/reporting-empty-frame.html` + document.body.appendChild(iframe); + await new Promise(resolve => { + iframe.addEventListener('load', resolve, {once: true}); + }); - const w = iframe.contentWindow; + const w = iframe.contentWindow; - function attachFrame(url) { - const frame = w.document.createElement('iframe'); - frame.src = url; - w.document.body.appendChild(frame); - } + function attachFrame(url) { + const frame = w.document.createElement('iframe'); + frame.src = url; + w.document.body.appendChild(frame); + } - const url = `${REMOTE_ORIGIN}/common/blank.html?${token()}`; - // The nested frame comes from cross-origin and doesn't have a CORP - // header, so it is blocked. - attachFrame(url); + const url = `${REMOTE_ORIGIN}/common/blank.html?${token()}`; + // The nested frame comes from cross-origin and doesn't have a CORP + // header, so it is blocked. + attachFrame(url); - // Wait 3 seconds for reports to settle. - await wait(3000); + // Wait 3 seconds for reports to settle. + await wait(3000); - checkCorpReportExistence(reports, url, iframe.src, 'iframe', 'enforce'); - checkCorpReportExistence( + checkCorpReportExistence(reports, url, iframe.src, 'iframe', 'enforce'); + checkCorpReportExistence( reportsForReportOnly, url, iframe.src, 'iframe', 'reporting'); - - t.done(); - } catch (e) { - t.step(() => { throw e }); - } }, 'navigation CORP'); -async_test(async (t) => { - try { - const iframe = document.createElement('iframe'); - t.add_cleanup(() => iframe.remove()); +promise_test(async (t) => { + const iframe = document.createElement('iframe'); + t.add_cleanup(() => iframe.remove()); - iframe.src = 'resources/reporting-empty-frame.html'; - const targetUrl = `/common/blank.html?${token()}`; - iframe.addEventListener('load', () => { - const nested = iframe.contentDocument.createElement('iframe'); - nested.src = targetUrl; - // |nested| doesn't have COEP whereas |iframe| has, so it is blocked. - iframe.contentDocument.body.appendChild(nested); - }, {once: true}); + iframe.src = 'resources/reporting-empty-frame.html'; + const targetUrl = `/common/blank.html?${token()}`; + iframe.addEventListener('load', t.step_func(() => { + const nested = iframe.contentDocument.createElement('iframe'); + nested.src = targetUrl; + // |nested| doesn't have COEP whereas |iframe| has, so it is blocked. + iframe.contentDocument.body.appendChild(nested); + }), {once: true}); - document.body.appendChild(iframe); + document.body.appendChild(iframe); - // Wait 3 seconds for reports to settle. - await wait(3000); + // Wait 3 seconds for reports to settle. + await wait(3000); - checkNavigationReportExistence(reports, targetUrl, iframe.src, 'enforce'); - checkNavigationReportExistence( - reportsForReportOnly, targetUrl, iframe.src, 'reporting'); - - t.done(); - } catch (e) { - t.step(() => { throw e }); - } + checkNavigationReportExistence(reports, targetUrl, iframe.src, 'enforce'); + checkNavigationReportExistence( + reportsForReportOnly, targetUrl, iframe.src, 'reporting'); }, 'COEP violation on nested frame navigation'); </script>$ diff --git a/tests/wpt/web-platform-tests/html/dom/elements/images/image.py b/tests/wpt/web-platform-tests/html/dom/elements/images/image.py index 1aec0819263..b8bb34e6180 100644 --- a/tests/wpt/web-platform-tests/html/dom/elements/images/image.py +++ b/tests/wpt/web-platform-tests/html/dom/elements/images/image.py @@ -4,7 +4,7 @@ from wptserve.utils import isomorphic_decode def main(request, response): - key = request.GET['id'] + key = request.GET[b'id'] alreadyServedRequest = False try: alreadyServedRequest = request.server.stash.take(key) @@ -19,10 +19,10 @@ def main(request, response): pass response.writer.write_status(200) - response.writer.write_header(b"etag", "abcdef") + response.writer.write_header(b"etag", b"abcdef") response.writer.write_header(b"content-length", len(body)) - response.writer.write_header(b"content-type", "image/png") - response.writer.write_header(b"cache-control", "public, max-age=31536000, no-cache") + response.writer.write_header(b"content-type", b"image/png") + response.writer.write_header(b"cache-control", b"public, max-age=31536000, no-cache") response.writer.end_headers() response.writer.write(body) diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-hover.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-hover.html new file mode 100644 index 00000000000..461917a9a0d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-hover.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> + +<style> +legend:hover { + background: lime; +} +</style> +<fieldset> + <legend>Legend</legend> +</fieldset> +<script> +// https://crbug.com/1127743 +promise_test(async () => { + await test_driver.click(document.querySelector('legend')); + assert_not_equals(document.querySelector('legend:hover'), null); +}, 'The rendered LEGEND should work well for :hover.'); +</script> diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp-ref.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp-ref.html new file mode 100644 index 00000000000..f37d8a3ec94 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp-ref.html @@ -0,0 +1,5 @@ +<!doctype html> +<title>Test reference</title> +<style>img { border: solid; }</style> +It should say PASS below:<br> +<img alt="PASS"> diff --git a/tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp.html b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp.html new file mode 100644 index 00000000000..2416e5dfd08 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/rendering/replaced-elements/images/blocked-by-csp.html @@ -0,0 +1,8 @@ +<!doctype html> +<title>Images behave the same when blocked by CSP as when failing to load/broken</title> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1664156"> +<link rel="match" href="blocked-by-csp-ref.html"> +<meta http-equiv=content-security-policy content="img-src 'none'"> +<style>img { border: solid; }</style> +It should say PASS below:<br> +<img src=image alt="PASS"> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html new file mode 100644 index 00000000000..9bfe5a1f312 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-sharedworker.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new SharedWorker( + "evaluation-order-1-nothrow-worker-setup.js"); + fetch_tests_from_worker(worker); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker-setup.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker-setup.js new file mode 100644 index 00000000000..88fc22ba7f7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker-setup.js @@ -0,0 +1,4 @@ +importScripts("/resources/testharness.js"); +importScripts("module/evaluation-order-setup.mjs"); +importScripts("module/evaluation-order-1-nothrow-worker.mjs"); +importScripts("module/evaluation-order-1-nothrow.mjs"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker.html new file mode 100644 index 00000000000..4ddfb61d507 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow-worker.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new Worker( + "evaluation-order-1-nothrow-worker-setup.js"); + fetch_tests_from_worker(worker); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow.html new file mode 100644 index 00000000000..b08372efd71 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-nothrow.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="module/evaluation-order-setup.mjs"></script> +<script> + window.addEventListener("load", ev => globalThis.testDone()); + globalThis.expectedLog = [ + "step-1-1", "step-1-2", + "microtask", + "script-load", + "global-load", + ]; +</script> + +<script src="module/evaluation-order-1-nothrow.mjs" + onerror="globalThis.unreachable()" + onload="globalThis.log.push('script-load')"></script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html new file mode 100644 index 00000000000..0ad18a8fba8 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-sharedworker.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new SharedWorker( + "evaluation-order-1-worker-setup.js"); + fetch_tests_from_worker(worker); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker-setup.js b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker-setup.js new file mode 100644 index 00000000000..f5bb6ecaf96 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker-setup.js @@ -0,0 +1,4 @@ +importScripts("/resources/testharness.js"); +importScripts("module/evaluation-order-setup.mjs"); +importScripts("module/evaluation-order-1-worker.mjs"); +importScripts("module/evaluation-order-1.mjs"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker.html new file mode 100644 index 00000000000..7760e087c2d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1-worker.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new Worker( + "evaluation-order-1-worker-setup.js"); + fetch_tests_from_worker(worker); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1.html new file mode 100644 index 00000000000..7bf7132081e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/evaluation-order-1.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="module/evaluation-order-setup.mjs"></script> +<script> + window.addEventListener("load", event => globalThis.testDone()); + globalThis.expectedLog = [ + "step-1-1", "step-1-2", + "global-error", "error", + "microtask", + "script-load", + "global-load" + ]; +</script> + +<script src="module/evaluation-order-1.mjs" + onerror="unreachable()" onload="log.push('script-load')"></script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html index 73a6ce3db00..50933da2c1d 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html @@ -9,6 +9,7 @@ window.log = []; window.addEventListener("error", ev => log.push(ev.error)); + window.addEventListener("onunhandledrejection", unreachable); const test_load = async_test( "Parse errors in different files should be reported " + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html index 0d67cb819a9..51adb09d11a 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html @@ -9,6 +9,7 @@ window.log = []; window.addEventListener("error", ev => log.push(ev.error)); + window.addEventListener("onunhandledrejection", unreachable); const test_load = async_test( "Instantiation errors in different files should be reported " + diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html index 5c0adff6ea8..bc52119bfe4 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html @@ -9,6 +9,7 @@ window.log = []; window.addEventListener("error", ev => log.push(ev.error)); + window.addEventListener("onunhandledrejection", unreachable); const test_load = async_test( "Evaluation errors are cached in intermediate module scripts"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.html index 6f119e30064..2480a60d6d4 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-1.html @@ -9,6 +9,7 @@ window.log = []; window.addEventListener("error", ev => log.push(ev.error)); + window.addEventListener("onunhandledrejection", unreachable); const test_load = async_test( "network error has higher priority than parse error"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.html index a7df1df0c86..673bf28ca20 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-2.html @@ -9,6 +9,7 @@ window.log = []; window.addEventListener("error", ev => log.push(ev.error)); + window.addEventListener("onunhandledrejection", unreachable); const test_load = async_test( "parse error has higher priority than instantiation error"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.html index 9b00df38915..8a16266f4cd 100644 --- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.html +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/error-type-3.html @@ -9,6 +9,7 @@ window.log = []; window.addEventListener("error", ev => log.push(ev.error)); + window.addEventListener("onunhandledrejection", unreachable); const test_load = async_test( "instantiation error has higher priority than evaluation error"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html new file mode 100644 index 00000000000..77ece9e4922 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-nothrow-sharedworker.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new SharedWorker( + "evaluation-order-1-nothrow-worker-setup.mjs", {type:"module"}); + fetch_tests_from_worker(worker); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html new file mode 100644 index 00000000000..cc7f0302bfc --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-1-sharedworker.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new SharedWorker( + "evaluation-order-1-worker-setup.mjs", {type:"module"}); + fetch_tests_from_worker(worker); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html new file mode 100644 index 00000000000..06456390021 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-2-import-sharedworker.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new SharedWorker( + "evaluation-order-2-import-worker-setup.mjs", {type:"module"}); + fetch_tests_from_worker(worker); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html new file mode 100644 index 00000000000..cd1f5edfa22 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-3-dynamic-sharedworker.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> + +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + const worker = new SharedWorker( + "evaluation-order-3-dynamic-worker-setup.mjs", {type:"module"}); + fetch_tests_from_worker(worker); +</script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html new file mode 100644 index 00000000000..da07faf42d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4-tla.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<title>Testing evaluation order</title> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + setup({allow_uncaught_exception: true}); + + window.log = []; + + window.addEventListener("error", ev => testDone()); + window.addEventListener("onunhandledrejection", unreachable); + + const test_load = async_test("Test evaluation order of modules"); + + window.addEventListener("load", ev => log.push("window-load")); + + function unreachable() { log.push("unexpected"); } + function testDone() { + test_load.step(() => { + assert_array_equals(log, [ + "step-4.1-1", "step-4.1-2", "microtask-4.1", + "script-load", "window-load", + "step-4.2-1", "step-4.2-2", "microtask-4.2", + ]); + }); + test_load.done(); + } +</script> + +<script type="module" src="evaluation-order-4.1.mjs" + onerror="unreachable()" onload="log.push('script-load')"> + </script> diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.1.mjs b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.1.mjs new file mode 100644 index 00000000000..f3347c1d28e --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.1.mjs @@ -0,0 +1,8 @@ +log.push("step-4.1-1"); +queueMicrotask(() => log.push("microtask-4.1")); +log.push("step-4.1-2"); + +await import("./evaluation-order-4.2.mjs"); + +// Not happening as we throw in the above module. +log.push("step-4.1-3"); diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.2.mjs b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.2.mjs new file mode 100644 index 00000000000..96a5cca3a63 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/evaluation-order-4.2.mjs @@ -0,0 +1,5 @@ +log.push("step-4.2-1"); +queueMicrotask(() => log.push("microtask-4.2")); +log.push("step-4.2-2"); + +throw new Error("error"); diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html index f269dcbcb93..e54bf5d5388 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html +++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-delayed.html @@ -10,7 +10,9 @@ async_test(t => { const iframe = document.createElement("iframe"); + iframe.onunhandledrejection = t.unreached_func("Unhandled promise rejection detected"); iframe.onerror = t.unreached_func("Error loading iframe"); + let onLoadWasCalled = false; iframe.onload = t.step_func(() => { assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n"); diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html index f59c3c0abe7..20645f4d788 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html +++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-import.html @@ -6,17 +6,20 @@ <script> async_test(t => { const iframe = document.createElement("iframe"); - iframe.onerror = t.unreached_func("Error loading iframe"); - let testEndWasCalled = false; - document.addEventListener("documentWriteDone", t.step_func(() => { - assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n"); - testEndWasCalled = true; - })); - iframe.onload = t.step_func_done(() => { - assert_true(testEndWasCalled, 'documentWriteDone event was not sent'); + + let onLoadWasCalled = false; + + iframe.onload = t.step_func(() => { + onLoadWasCalled = true; assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n"); + // Don't call the event handler another time after document.write. + iframe.onload = null; }); + document.addEventListener("documentWriteDone", t.step_func_done(() => { + assert_true(onLoadWasCalled, "onload must be called"); + assert_equals(iframe.contentDocument.body.textContent, "document.write body contents\n"); + })); iframe.src = "module-tla-import-iframe.html"; document.body.appendChild(iframe); diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise-iframe.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise-iframe.html index 5c55bed6c07..edc9e80cb39 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise-iframe.html +++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise-iframe.html @@ -1,10 +1,11 @@ <!doctype html> <script type=module> await new Promise(resolve => { - window.parent.document.test.step_timeout(resolve, 0)); + window.parent.document.test.step_timeout(resolve, 0); document.write("document.write body contents\n"); document.close(); window.parent.document.dispatchEvent(new CustomEvent("documentWriteDone")); }); </script> + Initial body contents diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html index 5fc30a8b0e7..4f1281bcce4 100644 --- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html +++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html @@ -9,18 +9,14 @@ async_test(t => { document.test = t; const iframe = document.createElement("iframe"); - iframe.onerror = t.unreached_func("Error loading iframe"); - let onLoadWasCalled = false; - iframe.onload = t.step_func(() => { - assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n"); - iframe.onload = null; - onLoadWasCalled = true; - }); - document.addEventListener("documentWriteDone", t.step_func_done(() => { - assert_true(onLoadWasCalled); + + document.addEventListener("documentWriteDone", t.step_func(() => { assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n"); })); + iframe.onload = t.step_func_done(() => { + assert_equals(iframe.contentDocument.body.textContent, "Initial body contents\n"); + }); iframe.src = "module-tla-promise-iframe.html"; document.body.appendChild(iframe); diff --git a/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-backspace.tentative.html b/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-backspace.tentative.html index 11b1830efb9..7f56fe6660e 100644 --- a/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-backspace.tentative.html +++ b/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-backspace.tentative.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <meta charset="utf-8"> +<meta name="timeout" content="long"> <title>InputEvent.getTargetRanges() at Backspace</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> @@ -269,6 +270,25 @@ promise_test(async () => { checkGetTargetRangesOfInputOnDeleteSomething(); }, 'Backspace at "<p> a[]bc</p>"'); +promise_test(async () => { + reset(); + editor.innerHTML = "<p>abc</p><p>def</p>"; + let p1 = editor.firstChild; + let abc = p1.firstChild; + let p2 = p1.nextSibling; + let def = p2.firstChild; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_equals(editor.innerHTML, "<p>abcdef</p>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<p>abc</p><p>[]def</p>"'); + // Invisible leading white-spaces in current block and invisible trailing // white-spaces in the previous block should be deleted for avoiding they // becoming visible when the blocks are joined. Perhaps, they should be @@ -389,6 +409,58 @@ promise_test(async () => { checkGetTargetRangesOfInputOnDeleteSomething(); }, 'Backspace at "<p>abc [</p><p>] def</p>"'); +promise_test(async () => { + reset(); + editor.innerHTML = "<p>abc</p><p><b>def</b></p>"; + let abc = editor.querySelector("p").firstChild; + let def = editor.querySelector("b").firstChild; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_equals(editor.innerHTML, "<p>abc<b>def</b></p>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<p>abc</p><p><b>[]def</b></p>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<p><b>abc</b></p><p><b>def</b></p>"; + let abc = editor.querySelector("p > b").firstChild; + let def = editor.querySelector("P + p > b").firstChild; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_in_array(editor.innerHTML, ["<p><b>abc</b><b>def</b></p>", + "<p><b>abcdef</b></p>"]); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<p><b>abc</b></p><p><b>[]def</b></p>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<p><i>abc</i></p><p><b>def</b></p>"; + let abc = editor.querySelector("i").firstChild; + let def = editor.querySelector("b").firstChild; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_equals(editor.innerHTML, "<p><i>abc</i><b>def</b></p>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<p><i>abc</i></p><p><b>[]def</b></p>"'); + // Invisible leading white-spaces in the current block should be deleted // for avoiding they becoming visible when the blocks are joined, but // preformatted trailing white-spaces in the first block shouldn't be @@ -786,6 +858,25 @@ promise_test(async () => { checkGetTargetRangesOfInputOnDeleteSomething(); }, 'Backspace at "<p>abc{<br>}def</p>"'); +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<p>def<br>ghi</p></div>"; + let p = editor.querySelector("p"); + let def = p.firstChild; + let abc = editor.firstChild.firstChild; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_in_array(editor.innerHTML, ["<div>abcdef<p>ghi</p></div>", + "<div>abcdef<br><p>ghi</p></div>"]); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<div>abc<p>[]def<br>ghi</p></div>"'); + // Joining parent block and child block should remove invisible preceding // white-spaces of the child block and invisible leading white-spaces in // the child block, and they should be contained in a range of @@ -799,7 +890,8 @@ promise_test(async () => { let abc = editor.firstChild.firstChild; selection.collapse(def, 3); await sendBackspaceKey(); - assert_equals(editor.innerHTML, "<div>abcdef<p>ghi</p></div>"); + assert_in_array(editor.innerHTML, ["<div>abcdef<p>ghi</p></div>", + "<div>abcdef<br><p>ghi</p></div>"]); checkGetTargetRangesOfBeforeinputOnDeleteSomething({ startContainer: abc, startOffset: 3, @@ -809,10 +901,79 @@ promise_test(async () => { checkGetTargetRangesOfInputOnDeleteSomething(); }, 'Backspace at "<div>abc <p> []def<br>ghi</p></div>"'); +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<p><b>def</b></p></div>"; + let abc = editor.querySelector("div").firstChild; + let def = editor.querySelector("b").firstChild; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_equals(editor.innerHTML, "<div>abc<b>def</b></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<div>abc<p><b>[]def</b></p></div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div><b>abc</b><p><b>def</b></p></div>"; + let abc = editor.querySelector("b").firstChild; + let def = editor.querySelector("p > b").firstChild; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_in_array(editor.innerHTML, ["<div><b>abc</b><b>def</b></div>", + "<div><b>abcdef</b></div>"]); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<div><b>abc</b><p><b>[]def</b></p></div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div><i>abc</i><p><b>def</b></p></div>"; + let abc = editor.querySelector("i").firstChild; + let def = editor.querySelector("b").firstChild; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_equals(editor.innerHTML, "<div><i>abc</i><b>def</b></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<div><i>abc</i><p><b>[]def</b></p></div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div><p>abc</p>def</div>"; + let abc = editor.querySelector("p").firstChild; + let def = editor.querySelector("p").nextSibling; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_equals(editor.innerHTML, "<div><p>abcdef</p></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<div><p>abc</p>[]def</div>"'); + // Joining child block and parent block should remove invisible trailing // white-spaces of the child block and invisible following white-spaces // in the parent block, and they should be contained by a range of -// `getTaregetRanges()`, but maybe needs discussion. +// `getTargetRanges()`, but maybe needs discussion. // https://github.com/w3c/input-events/issues/112 promise_test(async () => { reset(); @@ -831,6 +992,143 @@ promise_test(async () => { checkGetTargetRangesOfInputOnDeleteSomething(); }, 'Backspace at "<div><p>abc </p> []def</div>"'); +promise_test(async () => { + reset(); + editor.innerHTML = "<div><p><b>abc</b></p>def</div>"; + let abc = editor.querySelector("b").firstChild; + let def = editor.querySelector("p").nextSibling; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_equals(editor.innerHTML, "<div><p><b>abc</b>def</p></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<div><p><b>abc</b></p>[]def</div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div><p><b>abc</b></p><b>def</b></div>"; + let abc = editor.querySelector("b").firstChild; + let def = editor.querySelector("div > b").firstChild; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_in_array(editor.innerHTML, ["<div><p><b>abc</b><b>def</b></p></div>", + "<div><p><b>abcdef</b></p></div>"]); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<div><p><b>abc</b></p><b>[]def</b></div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div><p><b>abc</b></p><i>def</i></div>"; + let abc = editor.querySelector("b").firstChild; + let def = editor.querySelector("i").firstChild; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_equals(editor.innerHTML, "<div><p><b>abc</b><i>def</i></p></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<div><p><b>abc</b></p><i>[]def</i></div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<ul><li>def</li></ul>ghi</div>"; + let abc = editor.querySelector("div").firstChild; + let def = editor.querySelector("li").firstChild; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_equals(editor.innerHTML, "<div>abcdefghi</div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<div>abc<ul><li>[]def</li></ul>ghi</div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<ul><li>def</li></ul>ghi</div>"; + let def = editor.querySelector("li").firstChild; + let ghi = editor.querySelector("ul").nextSibling; + selection.collapse(ghi, 0); + await sendBackspaceKey(); + assert_equals(editor.innerHTML, "<div>abc<ul><li>defghi</li></ul></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: def, + startOffset: 3, + endContainer: ghi, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<div>abc<ul><li>def</li></ul>[]ghi</div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>"; + let abc = editor.querySelector("div").firstChild; + let def = editor.querySelector("li").firstChild; + selection.collapse(def, 0); + await sendBackspaceKey(); + assert_equals(editor.innerHTML, "<div>abcdef<ul><li>ghi</li></ul>jkl</div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<div>abc<ul><li>[]def</li><li>ghi</li></ul>jkl</div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>"; + let def = editor.querySelector("li").firstChild; + let ghi = editor.querySelector("li + li").firstChild; + selection.collapse(ghi, 0); + await sendBackspaceKey(); + assert_equals(editor.innerHTML, "<div>abc<ul><li>defghi</li></ul>jkl</div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: def, + startOffset: 3, + endContainer: ghi, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<div>abc<ul><li>def</li><li>[]ghi</li></ul>jkl</div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>"; + let ghi = editor.querySelector("li + li").firstChild; + let jkl = editor.querySelector("ul").nextSibling; + selection.collapse(jkl, 0); + await sendBackspaceKey(); + assert_equals(editor.innerHTML, "<div>abc<ul><li>def</li><li>ghijkl</li></ul></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: ghi, + startOffset: 3, + endContainer: jkl, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Backspace at "<div>abc<ul><li>def</li><li>ghi</li></ul>[]jkl</div>"'); + // Backspace in empty paragraph should remove the empty paragraph. In this // case, it should be treated as joining with the previous paragraph. // The target range should include the invisible <br> element in the empty diff --git a/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-forwarddelete.tentative.html b/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-forwarddelete.tentative.html index b31afacb62d..333a87a9d95 100644 --- a/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-forwarddelete.tentative.html +++ b/tests/wpt/web-platform-tests/input-events/input-events-get-target-ranges-forwarddelete.tentative.html @@ -1,5 +1,6 @@ <!DOCTYPE html> <meta charset="utf-8"> +<meta name="timeout" content="long"> <title>InputEvent.getTargetRanges() at Delete (forward delete)</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> @@ -269,6 +270,25 @@ promise_test(async () => { checkGetTargetRangesOfInputOnDeleteSomething(); }, 'Delete at "<p>ab[]c </p>"'); +promise_test(async () => { + reset(); + editor.innerHTML = "<p>abc</p><p>def</p>"; + let p1 = editor.firstChild; + let abc = p1.firstChild; + let p2 = p1.nextSibling; + let def = p2.firstChild; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_equals(editor.innerHTML, "<p>abcdef</p>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<p>abc[]</p><p>def</p>"'); + // Invisible trailing white-spaces in current block and invisible leading // white-spaces in the following block should be deleted for avoiding they // becoming visible when the blocks are joined. Perhaps, they should be @@ -388,6 +408,58 @@ promise_test(async () => { checkGetTargetRangesOfInputOnDeleteSomething(); }, 'Delete at "<p>abc [</p><p>] def</p>"'); +promise_test(async () => { + reset(); + editor.innerHTML = "<p>abc</p><p><b>def</b></p>"; + let abc = editor.querySelector("p").firstChild; + let def = editor.querySelector("b").firstChild; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_equals(editor.innerHTML, "<p>abc<b>def</b></p>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<p>abc[]</p><p><b>def</b></p>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<p><b>abc</b></p><p><b>def</b></p>"; + let abc = editor.querySelector("p > b").firstChild; + let def = editor.querySelector("P + p > b").firstChild; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_in_array(editor.innerHTML, ["<p><b>abc</b><b>def</b></p>", + "<p><b>abcdef</b></p>"]); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<p><b>abc[]</b></p><p><b>def</b></p>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<p><i>abc</i></p><p><b>def</b></p>"; + let abc = editor.querySelector("i").firstChild; + let def = editor.querySelector("b").firstChild; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_equals(editor.innerHTML, "<p><i>abc</i><b>def</b></p>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<p><i>abc[]</i></p><p><b>def</b></p>"'); + // Invisible leading white-spaces in the following block should be deleted // for avoiding they becoming visible when the blocks are joined, but // preformatted trailing white-spaces in the first block shouldn't be @@ -763,6 +835,25 @@ promise_test(async () => { checkGetTargetRangesOfInputOnDeleteSomething(); }, 'Delete at "<div>abc[]<br><hr>def</div>"'); +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<p>def<br>ghi</p></div>"; + let p = editor.querySelector("p"); + let def = p.firstChild; + let abc = editor.firstChild.firstChild; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_in_array(editor.innerHTML, ["<div>abcdef<p>ghi</p></div>", + "<div>abcdef<br><p>ghi</p></div>"]); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<div>abc<p>[]def<br>ghi</p></div>"'); + // Joining parent block and child block should remove invisible preceding // white-spaces of the child block and invisible leading white-spaces in // the child block, and they should be contained in a range of @@ -786,6 +877,75 @@ promise_test(async () => { checkGetTargetRangesOfInputOnDeleteSomething(); }, 'Delete at "<div>abc[] <p> def<br>ghi</p></div>"'); +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<p><b>def</b></p></div>"; + let abc = editor.querySelector("div").firstChild; + let def = editor.querySelector("b").firstChild; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_equals(editor.innerHTML, "<div>abc<b>def</b></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<div>abc[]<p><b>def</b></p></div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div><b>abc</b><p><b>def</b></p></div>"; + let abc = editor.querySelector("b").firstChild; + let def = editor.querySelector("p > b").firstChild; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_in_array(editor.innerHTML, ["<div><b>abc</b><b>def</b></div>", + "<div><b>abcdef</b></div>"]); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<div><b>abc[]</b><p><b>def</b></p></div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div><i>abc</i><p><b>def</b></p></div>"; + let abc = editor.querySelector("i").firstChild; + let def = editor.querySelector("b").firstChild; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_equals(editor.innerHTML, "<div><i>abc</i><b>def</b></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<div><i>abc[]</i><p><b>def</b></p></div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div><p>abc</p>def</div>"; + let abc = editor.querySelector("p").firstChild; + let def = editor.querySelector("p").nextSibling; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_equals(editor.innerHTML, "<div><p>abcdef</p></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<div><p>abc[]</p>def</div>"'); + // Joining child block and parent block should remove invisible trailing // white-spaces of the child block and invisible following white-spaces // in the parent block, and they should be contained by a range of @@ -808,6 +968,143 @@ promise_test(async () => { checkGetTargetRangesOfInputOnDeleteSomething(); }, 'Delete at "<div><p>abc[] </p> def</div>"'); +promise_test(async () => { + reset(); + editor.innerHTML = "<div><p><b>abc</b></p>def</div>"; + let abc = editor.querySelector("b").firstChild; + let def = editor.querySelector("p").nextSibling; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_equals(editor.innerHTML, "<div><p><b>abc</b>def</p></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<div><p><b>abc[]</b></p>def</div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div><p><b>abc</b></p><b>def</b></div>"; + let abc = editor.querySelector("b").firstChild; + let def = editor.querySelector("div > b").firstChild; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_in_array(editor.innerHTML, ["<div><p><b>abc</b><b>def</b></p></div>", + "<div><p><b>abcdef</b></p></div>"]); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<div><p><b>abc[]</b></p><b>def</b></div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div><p><b>abc</b></p><i>def</i></div>"; + let abc = editor.querySelector("b").firstChild; + let def = editor.querySelector("i").firstChild; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_equals(editor.innerHTML, "<div><p><b>abc</b><i>def</i></p></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<div><p><b>abc[]</b></p><i>def</i></div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<ul><li>def</li></ul>ghi</div>"; + let abc = editor.querySelector("div").firstChild; + let def = editor.querySelector("li").firstChild; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_equals(editor.innerHTML, "<div>abcdefghi</div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<div>abc[]<ul><li>def</li></ul>ghi</div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<ul><li>def</li></ul>ghi</div>"; + let def = editor.querySelector("li").firstChild; + let ghi = editor.querySelector("ul").nextSibling; + selection.collapse(def, 3); + await sendDeleteKey(); + assert_equals(editor.innerHTML, "<div>abc<ul><li>defghi</li></ul></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: def, + startOffset: 3, + endContainer: ghi, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<div>abc<ul><li>def[]</li></ul>ghi</div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>"; + let abc = editor.querySelector("div").firstChild; + let def = editor.querySelector("li").firstChild; + selection.collapse(abc, 3); + await sendDeleteKey(); + assert_equals(editor.innerHTML, "<div>abcdef<ul><li>ghi</li></ul>jkl</div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: abc, + startOffset: 3, + endContainer: def, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<div>abc[]<ul><li>def</li><li>ghi</li></ul>jkl</div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>"; + let def = editor.querySelector("li").firstChild; + let ghi = editor.querySelector("li + li").firstChild; + selection.collapse(def, 3); + await sendDeleteKey(); + assert_equals(editor.innerHTML, "<div>abc<ul><li>defghi</li></ul>jkl</div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: def, + startOffset: 3, + endContainer: ghi, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<div>abc<ul><li>def[]</li><li>ghi</li></ul>jkl</div>"'); + +promise_test(async () => { + reset(); + editor.innerHTML = "<div>abc<ul><li>def</li><li>ghi</li></ul>jkl</div>"; + let ghi = editor.querySelector("li + li").firstChild; + let jkl = editor.querySelector("ul").nextSibling; + selection.collapse(ghi, 3); + await sendDeleteKey(); + assert_equals(editor.innerHTML, "<div>abc<ul><li>def</li><li>ghijkl</li></ul></div>"); + checkGetTargetRangesOfBeforeinputOnDeleteSomething({ + startContainer: ghi, + startOffset: 3, + endContainer: jkl, + endOffset: 0, + }); + checkGetTargetRangesOfInputOnDeleteSomething(); +}, 'Delete at "<div>abc<ul><li>def</li><li>ghi[]</li></ul>jkl</div>"'); + // Delete in empty paragraph should remove the empty paragraph. In this // case, it should be treated as joining with the previous paragraph. // The target range should include the invisible <br> element in the empty diff --git a/tests/wpt/web-platform-tests/interfaces/encoding.idl b/tests/wpt/web-platform-tests/interfaces/encoding.idl index bae48f11993..7585cb3717c 100644 --- a/tests/wpt/web-platform-tests/interfaces/encoding.idl +++ b/tests/wpt/web-platform-tests/interfaces/encoding.idl @@ -44,11 +44,6 @@ interface TextEncoder { }; TextEncoder includes TextEncoderCommon; -interface mixin GenericTransformStream { - readonly attribute ReadableStream readable; - readonly attribute WritableStream writable; -}; - [Exposed=(Window,Worker)] interface TextDecoderStream { constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options = {}); diff --git a/tests/wpt/web-platform-tests/interfaces/intersection-observer.idl b/tests/wpt/web-platform-tests/interfaces/intersection-observer.idl index fa1de190387..52db1c4baa9 100644 --- a/tests/wpt/web-platform-tests/interfaces/intersection-observer.idl +++ b/tests/wpt/web-platform-tests/interfaces/intersection-observer.idl @@ -8,7 +8,7 @@ callback IntersectionObserverCallback = undefined (sequence<IntersectionObserver [Exposed=Window] interface IntersectionObserver { constructor(IntersectionObserverCallback callback, optional IntersectionObserverInit options = {}); - readonly attribute Node? root; + readonly attribute (Element or Document)? root; readonly attribute DOMString rootMargin; readonly attribute FrozenArray<double> thresholds; undefined observe(Element target); diff --git a/tests/wpt/web-platform-tests/interfaces/sanitizer-api.tentative.idl b/tests/wpt/web-platform-tests/interfaces/sanitizer-api.tentative.idl index 25cba22ecfc..600ae0514a3 100644 --- a/tests/wpt/web-platform-tests/interfaces/sanitizer-api.tentative.idl +++ b/tests/wpt/web-platform-tests/interfaces/sanitizer-api.tentative.idl @@ -8,4 +8,6 @@ [CallWith=ScriptState, RaisesException] DOMString sanitizeToString(DOMString input); }; -dictionary SanitizerConfig {}; +dictionary SanitizerConfig { + sequence<DOMString>? dropElements; +}; diff --git a/tests/wpt/web-platform-tests/interfaces/streams.idl b/tests/wpt/web-platform-tests/interfaces/streams.idl index 1df6827189d..99c3a5dee91 100644 --- a/tests/wpt/web-platform-tests/interfaces/streams.idl +++ b/tests/wpt/web-platform-tests/interfaces/streams.idl @@ -219,3 +219,8 @@ interface CountQueuingStrategy { readonly attribute unrestricted double highWaterMark; readonly attribute Function size; }; + +interface mixin GenericTransformStream { + readonly attribute ReadableStream readable; + readonly attribute WritableStream writable; +}; diff --git a/tests/wpt/web-platform-tests/interfaces/webxr-hand-input.idl b/tests/wpt/web-platform-tests/interfaces/webxr-hand-input.idl index 260c00365ac..a7eb3b1a0e8 100644 --- a/tests/wpt/web-platform-tests/interfaces/webxr-hand-input.idl +++ b/tests/wpt/web-platform-tests/interfaces/webxr-hand-input.idl @@ -48,9 +48,9 @@ interface XRJointSpace: XRSpace {}; partial interface XRFrame { XRJointPose? getJointPose(XRJointSpace joint, XRSpace baseSpace); - void fillJointRadii(sequence<XRJointSpace> jointSpaces, Float32Array radii); + boolean fillJointRadii(sequence<XRJointSpace> jointSpaces, Float32Array radii); - void fillPoses(sequence<XRSpace> spaces, XRSpace baseSpace, Float32Array transforms); + boolean fillPoses(sequence<XRSpace> spaces, XRSpace baseSpace, Float32Array transforms); }; interface XRJointPose: XRPose { diff --git a/tests/wpt/web-platform-tests/layout-instability/move-distance-clamped.html b/tests/wpt/web-platform-tests/layout-instability/move-distance-clamped.html new file mode 100644 index 00000000000..6c5f9597f9a --- /dev/null +++ b/tests/wpt/web-platform-tests/layout-instability/move-distance-clamped.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<title>Layout Instability: distance fraction not more than 1.0</title> +<link rel="help" href="https://wicg.github.io/layout-instability/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/test-adapter.js"></script> +<script src="resources/util.js"></script> +<style> +body { margin: 0; } +#shifter { + position: relative; + width: 100vw; + height: 100vh; + left: -2000vw; + top: -2000vh; +} +</style> +<div id="shifter"></div> +<script> + +promise_test(async () => { + const watcher = new ScoreWatcher; + + // Wait for the initial render to complete. + await waitForAnimationFrames(2); + + // Modify the position of the div. + document.querySelector("#shifter").style = "left: 0; top: 0"; + + const docElement = document.documentElement; + const viewWidth = docElement.clientWidth; + const viewHeight = docElement.clientHeight; + + // An element the size of the viewport has shifted by a huge distance, but + // the move distance is effectively the viewport width or height (whichever + // is larger) as the distance fraction is limited to a maximum of 1.0. + const expectedScore = computeExpectedScore( + viewWidth * viewHeight, + Math.max(viewWidth, viewHeight)); + + // Observer fires after the frame is painted. + cls_expect(watcher, {score: 0}); + await watcher.promise; + cls_expect(watcher, {score: expectedScore}); +}, "Distance fraction not more than 1.0."); + +</script> diff --git a/tests/wpt/web-platform-tests/layout-instability/visibility-hidden.html b/tests/wpt/web-platform-tests/layout-instability/visibility-hidden.html new file mode 100644 index 00000000000..ec1c3316380 --- /dev/null +++ b/tests/wpt/web-platform-tests/layout-instability/visibility-hidden.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<title>Layout Instability: visibility:hidden</title> +<link rel="help" href="https://wicg.github.io/layout-instability/" /> +<div id="target" style="position: absolute; top: 0; width: 400px; height: 400px; visibility: hidden"></div> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/util.js"></script> +<script> + +promise_test(async () => { + const watcher = new ScoreWatcher; + + // Wait for the initial render to complete. + await waitForAnimationFrames(2); + + // Shift target, for which no shift should be reported because it's hidden. + document.querySelector("#target").style.top = '200px'; + + await waitForAnimationFrames(2); + // No shift should be reported. + assert_equals(watcher.score, 0); +}, 'visibility:hidden'); + +</script> diff --git a/tests/wpt/web-platform-tests/lint.ignore b/tests/wpt/web-platform-tests/lint.ignore index a3b91f1a992..d299867133c 100644 --- a/tests/wpt/web-platform-tests/lint.ignore +++ b/tests/wpt/web-platform-tests/lint.ignore @@ -219,7 +219,6 @@ SET TIMEOUT: webvtt/* SET TIMEOUT: workers/* SET TIMEOUT: xhr/resources/init.htm SET TIMEOUT: xhr/resources/xmlhttprequest-timeout.js -SET TIMEOUT: focus/support/focus-restoration-in-different-site-iframes-outer.sub.html # generate_tests implementation and sample usage GENERATE_TESTS: resources/test/tests/functional/generate-callback.html diff --git a/tests/wpt/web-platform-tests/mathml/crashtests/display-and-column-properties.html b/tests/wpt/web-platform-tests/mathml/crashtests/display-and-column-properties.html new file mode 100644 index 00000000000..c40a2a05497 --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/crashtests/display-and-column-properties.html @@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html class="test-wait"> + <head> + <title>MathML elements with display and column properties</title> + <meta charset="utf-8"/> + <style> + math { + column-width: 100px; + } + </style> + </head> + <body> + <math></math> + <math style="display: list-item"></math> + <script> + window.addEventListener("load", function() { + // Force initial layout. + document.documentElement.getBoundingClientRect(); + + // Change display and reforce layout. + let maths = document.getElementsByTagName("math"); + maths[0].setAttribute("style", "display: list-item"); + maths[1].removeAttribute("style"); + document.documentElement.getBoundingClientRect(); + + document.documentElement.classList.remove("test-wait"); + }); + </script> + </body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/crashtests/multicol-on-token-elements.html b/tests/wpt/web-platform-tests/mathml/crashtests/multicol-on-token-elements.html new file mode 100644 index 00000000000..9fc00eb6911 --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/crashtests/multicol-on-token-elements.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<math><mi style="column-count: 10">mi</mi></math> +<math><mi style="column-width: 10px">mi</mi></math> +<math><mn style="column-count: 10">mn</mn></math> +<math><mn style="column-width: 10px">mn</mn></math> +<math><mo style="column-count: 10">mo</mo></math> +<math><mo style="column-width: 10px">mo</mo></math> +<math><ms style="column-count: 10">ms</ms></math> +<math><ms style="column-width: 10px">ms</ms></math> +<math><mtext style="column-count: 10">mtext</mtext></math> +<math><mtext style="column-width: 10px">mtext</mtext></math> diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter-ref.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter-ref.html new file mode 100644 index 00000000000..21fc165b7da --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter-ref.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Blur filter (reference)</title> +</head> +<body> + <p>Rectangles should be blurred.</p> + <div style="background: green; filter: blur(5px); width: 200px; height: 200px;"></div> + <div style="background: green; filter: blur(5px); width: 200px; height: 200px; position: absolute; top: 300px"></div> + </div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter.html new file mode 100644 index 00000000000..9540a017d2e --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/blur-filter.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Blur filter</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> +<link rel="match" href="blur-filter-ref.html"/> +<meta name="assert" content="Verify that 'filter: blur' works on MathML elements."> +</head> +<body> + <p>Rectangles should be blurred.</p> + <div> + <math><mspace width="200px" height="200px" style="background: green; filter: blur(5px)"/></math> + </div> + <div style="position: absolute; top: 300px"> + <math style="filter: blur(5px)"><mspace width="200px" height="200px" style="background: green"/></math> + </div> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mspace");</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path-ref.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path-ref.html new file mode 100644 index 00000000000..57935564bf0 --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path-ref.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Clip property (reference)</title> +</head> +<body> + <p>Rectangles should be clipped to a polygon.</p> + <div style="background: green; width: 200px; height: 200px; clip-path: polygon(10% 10%, 90% 10%, 90% 90%, 10% 90%)"></div> + <div style="background: green; width: 200px; height: 200px; position: absolute; top: 300px; clip-path: polygon(10% 10%, 90% 10%, 90% 90%, 10% 90%)"></div> + </div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path.html new file mode 100644 index 00000000000..5ff62ee7d4d --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-path.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Clip property</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> +<link rel="match" href="clip-path-ref.html"/> +<meta name="assert" content="Verify that the clip property works on MathML elements."> +</head> +<body> + <p>Rectangles should be clipped to a polygon.</p> + <div> + <math><mspace width="200px" height="200px" style="background: green; clip-path: polygon(10% 10%, 90% 10%, 90% 90%, 10% 90%)"/></math> + </div> + <div style="position: absolute; top: 300px; width: 200px; height: 200px"> + <math style="position: absolute; clip-path: polygon(10% 10%, 90% 10%, 90% 90%, 10% 90%)"><mspace width="200px" height="200px" style="background: green"/></math> + </div> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mspace");</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-ref.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-ref.html new file mode 100644 index 00000000000..7882ac8c31e --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip-ref.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Clip property (reference)</title> +</head> +<body> + <p>Rectangles should be clipped.</p> + <div style="background: green; width: 200px; height: 200px; position: absolute; top: 100px; clip: rect(0px 100px 100px 0px)"></div> + <div style="background: green; width: 200px; height: 200px; position: absolute; top: 300px; clip: rect(0px 100px 100px 0px)"></div> + </div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip.html new file mode 100644 index 00000000000..633e20cb78a --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/clip.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Clip property</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> +<link rel="match" href="clip-ref.html"/> +<meta name="assert" content="Verify that the clip property works on MathML elements."> +</head> +<body> + <p>Rectangles should be clipped.</p> + <div> + <math><mspace width="200px" height="200px" style="position:absolute; top:100px; background: green; clip: rect(0px 100px 100px 0px)"/></math> + </div> + <div style="position: absolute; top: 300px; width: 200px; height: 200px"> + <math style="position: absolute; clip: rect(0px 100px 100px 0px)"><mspace width="200px" height="200px" style="background: green"/></math> + </div> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mspace");</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/display-2.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/display-2.html new file mode 100644 index 00000000000..e0d41e4412f --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/display-2.html @@ -0,0 +1,134 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Verify that one can override the layout of MathML elements with the CSS display property</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#layout-algorithms"> +<meta name="assert" content="Verify that one can override the display of a MathML element."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/mathml/support/layout-comparison.js"></script> +<script src="/mathml/support/mathml-fragments.js"></script> +<style> + mfrac { + padding: 0; + } +</style> +<script> + const Xsize = 25; + const templates = { + "block display": `<math style="display: block;">XXX</math>`, + "block display with contrained width": `<math style="display: block; width: ${2*Xsize}px;">XXX</math>`, + "list display inside display block": `<math style="display: block">\ + <mmultiscripts style="display: list-item;">X</mmultiscripts>\ + <maction style="display: list-item;">X</maction>\ + <mpadded style="display: list-item;">X</mpadded>\ +</math>`, + "inline display": `<math style="display: inline;">XXX</math>`, + "inline-block display": `<math style="display: inline-block">XXX</math>`, + "table display (math)": `<math style="display: table">\ + <mfrac style='display: table-row'>\ + <msub style='display: table-cell'>X</msub>\ + <msup style='display: table-cell'>X</msup>\ + <msubsup style='display: table-cell'>X</msubsup>\ + </mfrac>\ + <mtable style='display: table-row'>\ + <munder style='display: table-cell'>X</munder>\ + <mover style='display: table-cell'>X</mover>\ + <munderover style='display: table-cell'>X</munderover>\ + </mtable>\ +</math>`, + "table display (mrow)": `<math display="block">\ +<mrow style="display: table">\ + <mfrac style='display: table-row'>\ + <msub style='display: table-cell'>X</msub>\ + <msup style='display: table-cell'>X</msup>\ + <msubsup style='display: table-cell'>X</msubsup>\ + </mfrac>\ + <mtable style='display: table-row'>\ + <munder style='display: table-cell'>X</munder>\ + <mover style='display: table-cell'>X</mover>\ + <munderover style='display: table-cell'>X</munderover>\ + </mtable>\ +</mrow></math>`, + "inline-table display (math)": `<math style="display: inline-table">\ + <mfrac style='display: table-row'>\ + <msub style='display: table-cell'>X</msub>\ + <msup style='display: table-cell'>X</msup>\ + <msubsup style='display: table-cell'>X</msubsup>\ + </mfrac>\ + <mtable style='display: table-row'>\ + <munder style='display: table-cell'>X</munder>\ + <mover style='display: table-cell'>X</mover>\ + <munderover style='display: table-cell'>X</munderover>\ + </mtable>\ +</math>`, + "inline-table display (mrow)": `<math display="block">\ +<mrow style="display: inline-table">\ + <mfrac style='display: table-row'>\ + <msub style='display: table-cell'>X</msub>\ + <msup style='display: table-cell'>X</msup>\ + <msubsup style='display: table-cell'>X</msubsup>\ + </mfrac>\ + <mtable style='display: table-row'>\ + <munder style='display: table-cell'>X</munder>\ + <mover style='display: table-cell'>X</mover>\ + <munderover style='display: table-cell'>X</munderover>\ + </mtable>\ +</mrow></math>`, + "flexbox display (math)": `<math style="display: flex; flex-direction: column;">XXX</math>`, + "flexbox display (mrow)": `<math display="block"><mrow style="display: flex; flex-direction: column;">XXX</mrow></math>`, + "grid display (math)": `<math style="display: grid; grid-gap: 2px; grid-template-columns: ${Xsize}px ${Xsize}px ${Xsize}px;>">XXXXXXXXX</math>`, + "grid display (mrow)": `<math display="block"><mrow style="display: grid; grid-gap: 2px; grid-template-columns: ${Xsize}px ${Xsize}px ${Xsize}px;>">XXXXXXXXX</mrow></math>`, + "ruby display (math)": `<math style="display: ruby;">\ +<mrow style="display: ruby-base;">X</mrow>\ +<mrow style="display: ruby-text">XX</mrow>\ +</math>`, + "ruby display (mrow)": `<math display="block"><mrow style="display: ruby;">\ +<mrow style="display: ruby-base;">X</mrow>\ +<mrow style="display: ruby-text">XX</mrow>\ +</mrow></math>`, + "block display with column width (math)": `<math style="display: block; column-width: ${2*Xsize}px">\ + <mrow>XXXX</mrow><mrow>XXXX</mrow><mrow>XXXX</mrow>\ +</math>`, + "block display with column width (mrow)": `<math style="display: block"><mrow style="display: block; column-width: ${2*Xsize}px">\ + <mrow>XXXX</mrow><mrow>XXXX</mrow><mrow>XXXX</mrow>\ +</mrow></math>`, + }; + + setup({ explicit_done: true }); + window.addEventListener("load", runTests); + + function runTests() { + + for (let key in templates) { + if (!templates.hasOwnProperty(key)) + continue; + let mathtest = templates[key]. + replace(/X/g, `<mspace style="display: inline-block; width: ${Xsize}px; height: ${Xsize}px; background: black"></mspace>`); + let reference = mathtest. + replace(/maction|math|mfrac|mmultiscripts|mover|mover|mpadded|mrow|mspace|msubsup|msub|msup|mtable|munderover|munder/g, "div"); + document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;">\ +<div><span>${key}:</span>${mathtest}</div>\ +<div><span>${key}:</span>${reference}</div>\ +</div>`); + let div = document.body.lastElementChild; + let elementDiv = div.firstElementChild; + let referenceDiv = div.lastElementChild; + + test(function() { + const epsilon = 1; + compareLayout(elementDiv, referenceDiv, epsilon); + }, `${key}`); + + div.style = "display: none;"; // Hide the div after measurement. + } + + done(); + } +</script> +</head> +<body> + <div id="log"></div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/transform-ref.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/transform-ref.html new file mode 100644 index 00000000000..005e8a78828 --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/transform-ref.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Transform property (reference)</title> +</head> +<body> + <p>Rectangles should be rotated.</p> + <div style="background: green; width: 200px; height: 200px; position: absolute; top: 100px; transform: rotate(90deg)"></div> + <div style="background: green; width: 200px; height: 200px; position: absolute; top: 300px; transform: rotate(90deg)"></div> + </div> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/relations/css-styling/transform.html b/tests/wpt/web-platform-tests/mathml/relations/css-styling/transform.html new file mode 100644 index 00000000000..b50d6c80045 --- /dev/null +++ b/tests/wpt/web-platform-tests/mathml/relations/css-styling/transform.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>Transform property</title> +<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling"> +<link rel="match" href="transform-ref.html"/> +<meta name="assert" content="Verify that the transform property works on MathML elements."> +</head> +<body> + <p>Rectangles should be rotated.</p> + <div> + <math><mspace width="200px" height="200px" style="position:absolute; top:100px; background: green; transform: rotate(90deg)"/></math> + </div> + <div style="position: absolute; top: 300px; width: 200px; height: 200px"> + <math style="position: absolute; transform: rotate(90deg)"><mspace width="200px" height="200px" style="background: green"/></math> + </div> + <script src="/mathml/support/feature-detection.js"></script> + <script>MathMLFeatureDetection.ensure_for_match_reftest("has_mspace");</script> +</body> +</html> diff --git a/tests/wpt/web-platform-tests/mathml/support/box-comparison.js b/tests/wpt/web-platform-tests/mathml/support/box-comparison.js index a574b01706b..b30ad279dfe 100644 --- a/tests/wpt/web-platform-tests/mathml/support/box-comparison.js +++ b/tests/wpt/web-platform-tests/mathml/support/box-comparison.js @@ -71,23 +71,24 @@ function compareSizeWithAndWithoutStyle(tag, style) { if (!FragmentHelper.isValidChildOfMrow(tag)) throw `Invalid argument: ${tag}`; + // FIXME <mrow> only needed as workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1658135 document.body.insertAdjacentHTML("beforeend", `<div style="position: absolute;">\ -<div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\ -<div style="display: inline-block"><math>${MathMLFragments[tag]}</math></div>\ +<div style="display: inline-block"><math><mrow>${MathMLFragments[tag]}</mrow></math></div>\ +<div style="display: inline-block"><math><mrow>${MathMLFragments[tag]}</mrow></math></div>\ </div>`); var div = document.body.lastElementChild; var styleDiv = div.firstElementChild; - var styleMath = styleDiv.firstElementChild; - var styleElement = FragmentHelper.element(styleMath); + var styleParent = styleDiv.firstElementChild.firstElementChild; + var styleElement = FragmentHelper.element(styleParent); styleElement.setAttribute("style", style); - var styleMathBox = styleMath.getBoundingClientRect(); + var styleParentBox = styleParent.getBoundingClientRect(); var styleElementBox = styleElement.getBoundingClientRect(); var noStyleDiv = div.lastElementChild; - var noStyleMath = noStyleDiv.firstElementChild; - var noStyleElement = FragmentHelper.element(noStyleMath); - var noStyleMathBox = noStyleMath.getBoundingClientRect(); + var noStyleParent = noStyleDiv.firstElementChild.firstElementChild; + var noStyleElement = FragmentHelper.element(noStyleParent); + var noStyleParentBox = noStyleParent.getBoundingClientRect(); var noStyleElementBox = noStyleElement.getBoundingClientRect(); var preferredWidthDelta = @@ -98,8 +99,8 @@ function compareSizeWithAndWithoutStyle(tag, style) { return { preferred_width_delta: preferredWidthDelta, - width_delta: styleMathBox.width - noStyleMathBox.width, - height_delta: styleMathBox.height - noStyleMathBox.height, + width_delta: styleParentBox.width - noStyleParentBox.width, + height_delta: styleParentBox.height - noStyleParentBox.height, element_width_delta: styleElementBox.width - noStyleElementBox.width, element_height_delta: styleElementBox.height - noStyleElementBox.height }; diff --git a/tests/wpt/web-platform-tests/network-error-logging/support/report.py b/tests/wpt/web-platform-tests/network-error-logging/support/report.py index 671b3a28921..65433e7840b 100644 --- a/tests/wpt/web-platform-tests/network-error-logging/support/report.py +++ b/tests/wpt/web-platform-tests/network-error-logging/support/report.py @@ -2,6 +2,8 @@ import time import json import re +from wptserve.utils import isomorphic_decode + def retrieve_from_stash(request, key, timeout, min_count, default_value): t0 = time.time() while time.time() - t0 < timeout: @@ -44,7 +46,7 @@ def main(request, response): new_reports = json.loads(request.body) for report in new_reports: report[u"metadata"] = { - b"content_type": request.headers[b"Content-Type"], + u"content_type": isomorphic_decode(request.headers[b"Content-Type"]), } with request.server.stash.lock: reports = request.server.stash.take(key=key) diff --git a/tests/wpt/web-platform-tests/pointerevents/pointerevent_iframe-touch-action-none_touch.html b/tests/wpt/web-platform-tests/pointerevents/pointerevent_iframe-touch-action-none_touch.html new file mode 100644 index 00000000000..1c9651d8c16 --- /dev/null +++ b/tests/wpt/web-platform-tests/pointerevents/pointerevent_iframe-touch-action-none_touch.html @@ -0,0 +1,63 @@ +<html> + <head> + <title>iframe touch-action:none attribute</title> + <meta name="viewport" content="width=device-width"> + <link rel="stylesheet" type="text/css" href="pointerevent_styles.css"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="pointerevent_support.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-actions.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + </head> + <body onload="run()"> + <h1>iframe touch-action:none attribute</h1> + <h2 id="pointerTypeDescription"></h2> + <h4>Test Description: Drag your finger in the green rectangle below then tap the "Done" button.</h4> + <br> + <iframe id="target" + style="touch-action:none;" + src="resources/iframe-touch-action-none-subframe.html"> + </iframe> + <input type="button" id="btnDone" value="Done"> + </body> + <script> + var event_log = []; + + function resetTestState() { + event_log = []; + } + + function run() { + var test_pointerEvent = setup_pointerevent_test("iframe received pointercancel", + ["touch"]); + var actions_promise; + var target = document.getElementById("target"); + + on_event(document.getElementById("btnDone"), "click", () => { + test_pointerEvent.step(() => { + assert_equals(event_log.join(", "), "pointercancel", + "exactly one pointercancel received"); + }); + actions_promise.then(() => test_pointerEvent.done()); + }); + + on_event(window, "message", e => { + var msg = JSON.parse(event.data); + if (msg.type == "event") + event_log.push(msg.eventType); + }); + + actions_promise = new test_driver.Actions() + .addPointer("pointer1", "touch") + .pointerMove(0, 0, {origin: target}) + .pointerDown() + .pointerMove(25, 25, {origin: target}) + .pointerUp() + .pointerMove(0, 0, {origin: btnDone}) + .pointerDown() + .pointerUp() + .send(); + } + </script> +</html> diff --git a/tests/wpt/web-platform-tests/pointerevents/resources/iframe-touch-action-none-subframe.html b/tests/wpt/web-platform-tests/pointerevents/resources/iframe-touch-action-none-subframe.html new file mode 100644 index 00000000000..bcfb5e06588 --- /dev/null +++ b/tests/wpt/web-platform-tests/pointerevents/resources/iframe-touch-action-none-subframe.html @@ -0,0 +1,26 @@ +<html> + <style> + body { + width: 200px; + height: 150px; + padding: 0px; + margin: 0px; + background-color: lightgreen + } + </style> + <body></body> + <script> + function handler(e) { + window.top.postMessage(JSON.stringify({ + "type": "event", + "eventType": e.type + }), "*"); + } + + ["pointerup", "pointercancel"].forEach(eventType => { + document.body.addEventListener( + eventType, + handler); + }); + </script> +</html> diff --git a/tests/wpt/web-platform-tests/resources/test-only-api.js b/tests/wpt/web-platform-tests/resources/test-only-api.js index 3fdf1cea6eb..ef66e0e733f 100644 --- a/tests/wpt/web-platform-tests/resources/test-only-api.js +++ b/tests/wpt/web-platform-tests/resources/test-only-api.js @@ -47,11 +47,14 @@ function loadScript(path) { * Only call this function if isChromiumBased === true. * * @param {Array.<string>} resources - A list of scripts to load: Mojo JS - * bindings should be of the form '/gen/../*.mojom.js', the ordering of which - * does not matter. Do not include mojo_bindings.js in this list. + * bindings should be of the form '/gen/../*.mojom.js' or + * '/gen/../*.mojom-lite.js' (requires `lite` to be true); the order does not + * matter. Do not include 'mojo_bindings.js' or 'mojo_bindings_lite.js'. + * @param {boolean=} lite - Whether the lite bindings (*.mojom-lite.js) are used + * (default is false). * @returns {Promise} */ -async function loadMojoResources(resources) { +async function loadMojoResources(resources, lite = false) { if (!isChromiumBased) { throw new Error('MojoJS not enabled; start Chrome with --enable-blink-features=MojoJS,MojoJSTest'); } @@ -70,13 +73,26 @@ async function loadMojoResources(resources) { if (path.endsWith('/mojo_bindings.js')) { throw new Error('Do not load mojo_bindings.js explicitly.'); } - if (! /^\/gen\/.*\.mojom\.js$/.test(path)) { - throw new Error(`Unrecognized resource path: ${path}`); + if (path.endsWith('/mojo_bindings_lite.js')) { + throw new Error('Do not load mojo_bindings_lite.js explicitly.'); + } + if (lite) { + if (! /^\/gen\/.*\.mojom-lite\.js$/.test(path)) { + throw new Error(`Unrecognized resource path: ${path}`); + } + } else { + if (! /^\/gen\/.*\.mojom\.js$/.test(path)) { + throw new Error(`Unrecognized resource path: ${path}`); + } } } - await loadScript(genPrefix + '/gen/layout_test_data/mojo/public/js/mojo_bindings.js'); - mojo.config.autoLoadMojomDeps = false; + if (lite) { + await loadScript(genPrefix + '/gen/layout_test_data/mojo/public/js/mojo_bindings_lite.js'); + } else { + await loadScript(genPrefix + '/gen/layout_test_data/mojo/public/js/mojo_bindings.js'); + mojo.config.autoLoadMojomDeps = false; + } for (const path of resources) { await loadScript(genPrefix + path); diff --git a/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-config.tentative.html b/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-config.tentative.html index c780bbe21b7..5c115a467cb 100644 --- a/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-config.tentative.html +++ b/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-config.tentative.html @@ -8,52 +8,81 @@ <body> <script> + const default_option ={dropElements: null}; test(t => { let s = new Sanitizer(); assert_true(s instanceof Sanitizer); - assert_object_equals(s.creationOptions, {}); + assert_object_equals(s.creationOptions, default_option); }, "SanitizerAPI creator without config."); test(t => { let s = new Sanitizer({}); assert_true(s instanceof Sanitizer); - assert_object_equals(s.creationOptions, {}); + assert_object_equals(s.creationOptions, default_option); }, "SanitizerAPI creator with empty config."); test(t => { let s = new Sanitizer(null); assert_true(s instanceof Sanitizer); - assert_object_equals(s.creationOptions, {}); + assert_object_equals(s.creationOptions, default_option); }, "SanitizerAPI creator with null as config."); test(t => { let s = new Sanitizer(undefined); assert_true(s instanceof Sanitizer); - assert_object_equals(s.creationOptions, {}); + assert_object_equals(s.creationOptions, default_option); }, "SanitizerAPI creator with undefined as config."); test(t => { let s = new Sanitizer({testConfig: [1,2,3], attr: ["test", "i", "am"]}); assert_true(s instanceof Sanitizer); - assert_object_equals(s.creationOptions, {}); + assert_object_equals(s.creationOptions, default_option); }, "SanitizerAPI creator with config ignore unknown values."); test(t => { - let options = {}; + let options = {dropElements: ["div"]}; let s = new Sanitizer(options); assert_true(s instanceof Sanitizer); - assert_object_equals(s.creationOptions, {}); + assert_object_equals(s.creationOptions, {dropElements: ["DIV"]}); - options.testConfig = [1,2,3]; - assert_object_equals(s.creationOptions, {}); + options.dropElements.push("test"); + assert_object_equals(s.creationOptions, {dropElements: ["DIV"]}); - s.creationOptions = {testConfig: [1,2,3]}; - assert_object_equals(s.creationOptions, {}); + s.creationOptions = {dropElements: ["test", "t"]}; + assert_object_equals(s.creationOptions, {dropElements: ["DIV"]}); - s.creationOptions['testConfig'] = [1,2,3]; - assert_object_equals(s.creationOptions, {}); + s.creationOptions['dropElements'] = [1,2,3]; + assert_object_equals(s.creationOptions, {dropElements: ["DIV"]}); }, "SanitizerAPI config is not editable."); + test(t => { + let s = new Sanitizer({dropElements: []}); + assert_true(s instanceof Sanitizer); + assert_equals(s.sanitizeToString("<div>balabala<i>test</i></div>"), "<div>balabala<i>test</i></div>"); + }, "SanitizerAPI creator with config {dropElements: []}.") + + test(t => { + let s = new Sanitizer({dropElements: null}); + assert_true(s instanceof Sanitizer); + assert_true(s.creationOptions instanceof Object); + assert_object_equals(s.creationOptions, default_option); + }, "SanitizerAPI creator with config {dropElements: null}.") + + test(t => { + let s = new Sanitizer({dropElements: undefined}); + assert_true(s instanceof Sanitizer); + assert_true(s.creationOptions instanceof Object); + assert_object_equals(s.creationOptions, default_option); + }, "SanitizerAPI creator with config {dropElements: undefined}."); + + test(t => { + assert_throws_js(TypeError, _ => {let s = new Sanitizer({dropElements: 123})}); + }, "SanitizerAPI creator with config {dropElements: 123}."); + + test(t => { + assert_throws_js(TypeError, _ => {let s = new Sanitizer({dropElements: "div"})}); + }, "SanitizerAPI creator with config {dropElements: div}."); + </script> </body> </html> diff --git a/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitize.tentative.html b/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitize.tentative.html index 219eff41891..44961e02f4e 100644 --- a/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitize.tentative.html +++ b/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitize.tentative.html @@ -13,9 +13,12 @@ d.appendChild(fragment); return d.innerHTML; } - const s = new Sanitizer({}); testcases.forEach(c => test(t => { + let s = new Sanitizer(c.config_input); + assert_true(s.creationOptions instanceof Object); + assert_object_equals(s.creationOptions, c.config_value); + fragment = s.sanitize(c.value); assert_true(fragment instanceof DocumentFragment); assert_equals(getString(fragment), c.result); diff --git a/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitizeToString.tentative.html b/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitizeToString.tentative.html index 98bb4a46018..7efbc3ca7bd 100644 --- a/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitizeToString.tentative.html +++ b/tests/wpt/web-platform-tests/sanitizer-api/sanitizer-sanitizeToString.tentative.html @@ -8,9 +8,10 @@ <body> <script> - const s = new Sanitizer({}); - testcases.forEach(c => test(t => { + let s = new Sanitizer(c.config_input); + assert_true(s.creationOptions instanceof Object); + assert_object_equals(s.creationOptions, c.config_value); assert_equals(s.sanitizeToString(c.value), c.result); }, "SanitizerAPI sanitizeToString function for " + c.message)); </script> diff --git a/tests/wpt/web-platform-tests/sanitizer-api/support/testcases.sub.js b/tests/wpt/web-platform-tests/sanitizer-api/support/testcases.sub.js index d1af1c9b5a9..a3cc6d38c8c 100644 --- a/tests/wpt/web-platform-tests/sanitizer-api/support/testcases.sub.js +++ b/tests/wpt/web-platform-tests/sanitizer-api/support/testcases.sub.js @@ -1,17 +1,24 @@ const testcases = [ - {value: "test", result: "test", message: "string"}, - {value: "<b>bla</b>", result: "<b>bla</b>", message: "html fragment"}, - {value: "<a<embla", result: "", message: "broken html"}, - {value: {}, result: "[object Object]", message: "empty object"}, - {value: 1, result: "1", message: "number"}, - {value: 000, result: "0", message: "zeros"}, - {value: 1+2, result: "3", message: "arithmetic"}, - {value: "", result: "", message: "empty string"}, - {value: undefined, result: "undefined", message: "undefined"}, - {value: null, result: "null", message: "null"}, - {value: "<html><head></head><body>test</body></html>", result: "test", message: "document"}, - {value: "<div>test", result: "<div>test</div>", message: "html without close tag"}, - {value: "<script>alert('i am a test')<\/script>", result: "", message: "scripts"}, - {value: "<p onclick='a= 123'>Click.</p>", result: "<p>Click.</p>", message: "onclick scripts"} - + {config_input: {}, config_value: {dropElements: null}, value: "test", result: "test", message: "string"}, + {config_input: {}, config_value: {dropElements: null}, value: "<b>bla</b>", result: "<b>bla</b>", message: "html fragment"}, + {config_input: {}, config_value: {dropElements: null}, value: "<a<embla", result: "", message: "broken html"}, + {config_input: {}, config_value: {dropElements: null}, value: {}, result: "[object Object]", message: "empty object"}, + {config_input: {}, config_value: {dropElements: null}, value: 1, result: "1", message: "number"}, + {config_input: {}, config_value: {dropElements: null}, value: 000, result: "0", message: "zeros"}, + {config_input: {}, config_value: {dropElements: null}, value: 1+2, result: "3", message: "arithmetic"}, + {config_input: {}, config_value: {dropElements: null}, value: "", result: "", message: "empty string"}, + {config_input: {}, config_value: {dropElements: null}, value: undefined, result: "undefined", message: "undefined"}, + {config_input: {}, config_value: {dropElements: null}, value: null, result: "null", message: "null"}, + {config_input: {}, config_value: {dropElements: null}, value: "<html><head></head><body>test</body></html>", result: "test", message: "document"}, + {config_input: {}, config_value: {dropElements: null}, value: "<div>test", result: "<div>test</div>", message: "html without close tag"}, + {config_input: {}, config_value: {dropElements: null}, value: "<script>alert('i am a test')<\/script>", result: "", message: "scripts"}, + {config_input: {}, config_value: {dropElements: null}, value: "<p onclick='a= 123'>Click.</p>", result: "<p>Click.</p>", message: "onclick scripts"}, + {config_input: {test: 123}, config_value: {dropElements: null}, value: "test", result: "test", message: "invalid config_input"}, + {config_input: {dropElements: []}, config_value: {dropElements:[]}, value: "test", result: "test", message: "empty dropElements list"}, + {config_input: {dropElements: ["div"]}, config_value: {dropElements:["DIV"]}, value: "<div>test</div><c>bla", result: "<c>bla</c>", message: "test html without close tag with dropElements list ['div']"}, + {config_input: {dropElements: ["script"]}, config_value: {dropElements:["SCRIPT"]}, value: "<script>alert('i am a test')<\/script>", result: "", message: "test script with [\"script\"] as dropElements list"}, + {config_input: {dropElements: ["test", "i"]}, config_value: {dropElements:["TEST","I"]}, value: "<div>balabala<i>test</i></div><test>t</test>", result: "<div>balabala</div>", message: "dropElements list [\"test\", \"i\"]}"}, + {config_input: {dropElements: ["I", "AM"]}, config_value: {dropElements:["I", "AM"]}, value: "<div>balabala<am>test</am></div>", result: "<div>balabala</div>", message: "dropElements list [\"I\", \"AM\"]}"}, + {config_input: {dropElements: ["am", "p"]}, config_value: {dropElements:["AM","P"]}, value: "<div>balabala<i>i</i><p>t</p><test>a</test></div>", result: "<div>balabala<i>i</i><test>a</test></div>", message: "dropElements list [\"am\", \"p\"]}"}, + {config_input: {dropElements: [123, [], "test", "i"]}, config_value: {dropElements:["123","","TEST","I"]}, value: "<div>balabala<i>test</i></div><test>t</test>", result: "<div>balabala</div>", message: "dropElements list with invalid values}"} ]; diff --git a/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-onrelease.https.html b/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-onrelease.https.html index 88c0cdb654c..524580cf370 100644 --- a/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-onrelease.https.html +++ b/tests/wpt/web-platform-tests/screen-wake-lock/wakelock-onrelease.https.html @@ -5,17 +5,19 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script> -async_test(async t => { +promise_test(async t => { await test_driver.set_permission({name: 'screen-wake-lock'}, 'granted', false); const lock = await navigator.wakeLock.request("screen"); - lock.onrelease = t.step_func_done((ev) => { + return new Promise(resolve => { + lock.onrelease = resolve; + lock.release(); + }).then(ev => { assert_class_string(ev, "Event", "release() must fire an Event object"); assert_equals(ev.target, lock, "The event's target must be the lock that was acquired"); assert_true(ev.isTrusted); assert_false(ev.bubbles); assert_false(ev.cancelable); }); - await lock.release(); }, "Test onreleased event's basic properties"); </script> diff --git a/tests/wpt/web-platform-tests/shadow-dom/declarative/element-internals-shadowroot.tentative.html b/tests/wpt/web-platform-tests/shadow-dom/declarative/element-internals-shadowroot.tentative.html index 0f01cc41acf..aeaa322a31c 100644 --- a/tests/wpt/web-platform-tests/shadow-dom/declarative/element-internals-shadowroot.tentative.html +++ b/tests/wpt/web-platform-tests/shadow-dom/declarative/element-internals-shadowroot.tentative.html @@ -41,4 +41,90 @@ test(() => { assert_true(constructed); }, 'ElementInternals.shadowRoot allows access to closed shadow root'); +test(() => { + let constructed = false; + const element = document.createElement('x-1'); + assert_throws_dom('NotSupportedError', () => element.attachInternals(),'attachInternals cannot be called before definition exists'); + customElements.define('x-1', class extends HTMLElement { + constructor() { + super(); + assert_true(!!this.attachInternals()); + constructed = true; + } + }); + assert_false(constructed); + assert_throws_dom('NotSupportedError', () => element.attachInternals(),'attachInternals cannot be called before constructor'); + customElements.upgrade(element); + assert_true(constructed); + assert_throws_dom('NotSupportedError', () => element.attachInternals(),'attachInternals already called'); +}, 'ElementInternals cannot be called before constructor, upgrade case'); + +test(() => { + let constructed = false; + const element = document.createElement('x-2'); + customElements.define('x-2', class extends HTMLElement { + constructor() { + super(); + // Don't attachInternals() here + constructed = true; + } + }); + assert_throws_dom('NotSupportedError', () => element.attachInternals(),'attachInternals cannot be called before constructor'); + assert_false(constructed); + customElements.upgrade(element); + assert_true(constructed); + assert_true(!!element.attachInternals(),'After the constructor, ok to call from outside'); +}, 'ElementInternals *can* be called after constructor, upgrade case'); + +test(() => { + let constructed = false; + customElements.define('x-3', class extends HTMLElement { + constructor() { + super(); + assert_true(!!this.attachInternals()); + constructed = true; + } + }); + const element = document.createElement('x-3'); + assert_true(constructed); + assert_throws_dom('NotSupportedError', () => element.attachInternals(), 'attachInternals already called'); +}, 'ElementInternals cannot be called after constructor calls it, create case'); + +test(() => { + let constructed = false; + const element = document.createElement('x-5'); + customElements.define('x-5', class extends HTMLElement { + static disabledFeatures = [ 'internals' ]; + constructor() { + super(); + assert_throws_dom('NotSupportedError', () => this.attachInternals(), 'attachInternals forbidden by disabledFeatures, constructor'); + constructed = true; + } + }); + assert_false(constructed); + assert_throws_dom('NotSupportedError', () => element.attachInternals(), 'attachInternals forbidden by disabledFeatures, pre-upgrade'); + customElements.upgrade(element); + assert_true(constructed); + assert_throws_dom('NotSupportedError', () => element.attachInternals(), 'attachInternals forbidden by disabledFeatures, post-upgrade'); +}, 'ElementInternals disabled by disabledFeatures'); + +test(() => { + let constructed = false; + const element = document.createElement('x-6'); + const sr = element.attachShadow({mode: 'closed'}); + assert_true(sr instanceof ShadowRoot); + customElements.define('x-6', class extends HTMLElement { + constructor() { + super(); + assert_throws_dom('NotSupportedError', () => this.attachShadow({mode:'open'}), 'attachShadow already called'); + const elementInternals = this.attachInternals(); + assert_equals(elementInternals.shadowRoot, null, 'ElementInternals.shadowRoot should not be available for pre-attached shadow'); + constructed = true; + } + }); + assert_false(constructed); + customElements.upgrade(element); + assert_true(constructed,'Failed to construct - test failed'); + assert_equals(element.shadowRoot, null, 'shadow root is closed'); +}, 'ElementInternals.shadowRoot doesn\'t reveal pre-attached closed shadowRoot'); </script> diff --git a/tests/wpt/web-platform-tests/tools/certs/cacert.key b/tests/wpt/web-platform-tests/tools/certs/cacert.key index c36ebcbc910..7b83e8f0e9e 100644 --- a/tests/wpt/web-platform-tests/tools/certs/cacert.key +++ b/tests/wpt/web-platform-tests/tools/certs/cacert.key @@ -1,30 +1,30 @@ -----BEGIN ENCRYPTED PRIVATE KEY----- -MIIFHzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIwt8BG3xFhxYCAggA -MB0GCWCGSAFlAwQBKgQQSn81QCB6EGEMiE6pZO1i9gSCBND1XL0OV5alXhRx/wna -TuDqgFVyDjKbFWkm4gV394chFtOBSlODjAJnDyn25YUCYAf4pj44OQ13YpxFoFtR -lvqA4TKdETHAONdij2CKIfZONO02Z5qURzySYQ2T4GRANS+UtO5KWD2vS0V4xVHL -p+BLLoxQM2TgO5vG9/SiktTY7QI7wS7prqUPiUkROOATMR24E+tNlzmCXVRVpMp6 -m8PUecEO4sobYE8KdUgXCiWNb23nok5mM38BTWgxs/6H/ARCPvAUutyqo/gsHMNv -uaOhev/yWTlF207/E/EtaS2pQcS0MT9sR7rK5KRLsoxpYrmPnEiid4nVvXPSmFAH -cRCivlb9+VhhJZTtpLCUPgIj7ek9ljZZsr9lw10FELHJNYgQD/2/hkkhdZMQTF/d -I+Yeq89t13PlyrGQUmL5k+XvmiCbWQWfNGw6p4vWznz6iB1P9L5IuWliQRXW4P3U -gh/3hRc+C1sDCzCqV1Tr4GFQ7gFTsM5a2AroiT9bJGONGmILPYf6X7UQINruvmBt -gBLeGJWAtdSN+1Fy7qLz/TbfEYCe0pBChVy1mKuSDXQ3mzWQA4UIJMBeIXkTtEPM -ijL0Q8SLpt6MTrH8bP78IgrzynugVNvX3gFeVscsGQSUNJvIK+pqgYE1YuwrzNWd -hpXbQCSgJaLajlyldrXCRudYchqCw4j4Y55BPN4mdgqW6P/9rOyyX9T5Lu/06HZH -ceRQtsZR5+Qy+aLVL/TJ6nAGp1huVj+Gmz0P+DVb75eqnF7dHBJNqwrrKjq3aIIc -YrXrKUa1OLkJAm1USHoIKTQS3tG/2xseVdRMCmC8HlaxzXxWxng/ho2L3pQ4MI+e -5FLqoZruNKUzB9IakfEscEHxleqi+r29gz0FIUWIJU4hPpnE3xL/RF6jP3/f99uJ -oOhKYVPZLRVgPP7bzO8dzvoF2qiqMRB6lWR7IrOAlHASkfzCkapaOGWgoKf9MqBO -BptdCA5me2Im5Yrn8DggTogr1o2ZRnvWtZ4S8Ynms4G7P1NM0Da92W08JLLH4/iU -4IimrFl7dPOn3jvKzr5hhGTmmxcVbO/XXnhY5qTqxlaB1fwq424vzQ7XeRMnlPeI -NQ/oqO/4Kzz0DrezIz36cXtW4hZt+xNzbvy0FQEqBvWJa3+44nP751owIUG+Af4g -EIj04smQz1AgiX+ojnvX8udSRsSfpylsUo8K4oF1uZuY3QlzoRgrb0cjR826YL5v -byd1pJrgxz0oRxduhzR/bHa4mtVmrHiCOYoBjvzEbfQMhnunri8W3HjNDLu50Pdp -u6xRzUuwL56aF7dqfUafez99KT2eFJBqPmSWnFyfVpL5iFW23KKPD9Oe/jxHWPLh -/zLqvHaZk4TCT6E0KCn9mv/S6JSoOt+lD6gUnerLqhOnFTKmrZkWCzfchu8Y8NVJ -nUCdOq/zKZVT1h8p0E8qLVYpTqRGQ4lgPkJt0i1qYJy5FXWmTnZQRdOKeWVh5vwK -q63ueNwEMGpYCKgm+Gm1StmAQc/eLVL2KmES1BTgTBq1olyiYMHKyIkes1paSvHh -kkirSf+XJxbQBXw6MpofKHQ5K9sdEfh8jofGwHudwdkrsXoIv/WTYANyg2h//6xh -qPtyTnrApHAKTsnVbbMt/+4tnw== +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIkaenDsgd4ocCAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECJAqFIqfz3yoBIIEyJzn9rsqRfFD +I75CcWTCXZM+f0oTgtBAmx2ZUVn46M9hOq1DGZo1QNcIV53MP+m3QPTwo2AZRsx+ +Q0YobCtHqQRtl3WjLmpWZTA8W/f15A/+N0IQDZy+hxfrYgbhcgT9EhaRMs8NH5Iu +GaMCmZDNm0RborKLdAtR3EtlFI3WZPejVv5r9HRl6TDHBjpfM+nB3Its11OfUoKO +QZQyqiAzZpGmwkxPvPVDVk9kKwR6k5ypvANRNS73txQojfDUdLh/Zz2B136Qk8iZ +f42gI/jbZQD81BT+9t+kfI5BDPYocsGQHSZ/l55NcBPnE3TtfPBWMXJ2T2IrA6LN +x7C6J5GGwBZ2RYQnim/1tOc6lrx2iGRfBlJa360JfO7jNLyssnChLMeQ1t3KmEN8 +ALxV9jMqN1w58px4qzbj4wVGHIEKb5o1/VhymhwuXBBYY4ztKKv9EKOu+ZMJfPtu +XILgXUuwnv1jetUXT+SbwVcGj4DoE+LSV7pB65jdmwQePH0icjkFmUXMVW/Pml/J +KBPuM4Ju4Wxt1+mLXp9maKICK3jJ8Gok2gi5x4axEHx3l8JOAIl+qA5gJ1N24yPl +1pkJcoEByU1pL32jtDMEn1Isf+pBl9vj5MdKs6EDh+ZrJhovc5puSDfENY1bv/Q6 +IqzLu45TQX6MTqkmGoE8wMJ9MP6otLYEY836+gk5F1cdf9Yw/FiIS3oha8mzj9F3 +BUKZj6ot5/q6Fcr9AQU94hwuJpl7iKAeR3DkDl26lVhbtxtZy0v18bXcqL+iFtMX +vlc8jAX2Aj8W5OgiAFq069W63Q9pa8HmkAQBoi62yRivJlcXpEoE0hn7en/Hmje1 +58OoiSGHM7c+FyYqBzXJg7j+hU5gn2hKm+PQD+Vyic/TC9mOJozuuOSMd8F94/4q +2FX9wAyCsyfq6JtJZVjcLu/Xu1h8LfFEyFGDehL6wj1/T3+lkFjc06QY+m7giWmn +J7ksUZOvZcpV8Z2LGMPZf2h+oOgfQ2df2qKCGz/2e4w5cu3wlZqd3+CxJU9cephZ +KJl8NRd3LI8SCbVGS21/tRRj65d3jbHgkbN15zbyinWeoggCpKbK/04Pue3aHs77 +NlmPVQyI6Pevl8eJM1YdXrbQCO0zXSg6FdUMm6ACknjRYXgD8rb8HLDj69M5mj5q +sCayfF0dsh20758w6E6BCtNo1RQyrvIc54SFWBXFwuxfpJmGgbp1jxQSx4ixRZ7i +zj3JHhlq8ldczaKqiRHhrr3utwVvH5+X9Yw8Bh9wzUrSOFu4TTMPfA7Dl+RjXxg2 +ymX81nv8uSnLc9cnHptug/pIpJh6xBLMcl0rmT7h3hH0u3ahrnu+oAp+M3zNHrsa +kUxOYe8bn9X2fVqN5rKCQe8OEpczXgtjS5C2DErciIWJhqaUTg3lAfN9xuaz4/KC +4APc+d7aVMef1tsd3T9JaTdh2KxjgOzE3Af/d+VwOxFMv71+hUXF5zgK/bkg6LPk +VGiRcShSbM7VbcAaCBMqY/7gz1m134FglMWCVmv9GCDR4AdAlD9KlQ9q0cfGaNJS +jj86YIu3Z4kzd4pPsjy4bX9k9OOPZ/eO6oSDB2+LqFGn0vHj/zAxfEcWJDm30KhN +Nkbwd5VFFkXdiQmePxAiGA== -----END ENCRYPTED PRIVATE KEY----- diff --git a/tests/wpt/web-platform-tests/tools/certs/cacert.pem b/tests/wpt/web-platform-tests/tools/certs/cacert.pem index f450f014d9f..a8ce54be557 100644 --- a/tests/wpt/web-platform-tests/tools/certs/cacert.pem +++ b/tests/wpt/web-platform-tests/tools/certs/cacert.pem @@ -1,16 +1,16 @@ -----BEGIN CERTIFICATE----- -MIJAhzCCP2+gAwIBAgIDC+NXMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl -Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMDA3MzAyMDEyNDhaFw0yMjEwMDgyMDEyNDha +MIJAhzCCP2+gAwIBAgIDBsfzMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl +Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMDA5MTIwMDI1MzBaFw0yMTA5MTIwMDI1MzBa MB0xGzAZBgNVBAMMEndlYi1wbGF0Zm9ybS10ZXN0czCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAONFL+vCrQenoebExCh0nArZa2+BRz3NmEkS0z7EBtc0 -i6FDQr3lwo+b2zDSqllvrpQHCFReuSagHAW1wPRo0mHicdvhHOCfFc2+bBPXS4db -8cUNUOc4ClRqOLPwGu+yPteWv/OJPx4nS9COU3HWj+KIAINtKtlxoRe6XbXs2D5J -3iMfJcI3ZINVWmnhAlMTKqzMLjn8ouIDAsyCf7aZj+JS39B4GN1CzBbomXEeJHad -36PChji2R+k7LJPK/4gwOsfSpiTfOoF0FK1IxZwQ9cWRhqEEgcFpt4CZSR0HadlG -MYnrgG4a0v/A1BbBQYDe1M0UPttUOHy2+7XHaEdB/vUCAwEAAaOCPc4wgj3KMAwG -A1UdEwQFMAMBAf8wHQYDVR0OBBYEFLN13aCb8lr+F42Asfynt8EreSkrMEcGA1Ud -IwRAMD6AFLN13aCb8lr+F42Asfynt8EreSkroSGkHzAdMRswGQYDVQQDDBJ3ZWIt -cGxhdGZvcm0tdGVzdHOCAwvjVzALBgNVHQ8EBAMCAgQwgh+bBgNVHR4Egh+SMIIf +BQADggEPADCCAQoCggEBAJ4nWe+DDK0SJZPqgT0i9Cfx7Wg4v1vN+q4yh/sPNmQ+ +wcNbSu7/UwzhBj4SsP/Wpu4DYpnsn19IW3sAsIpkeLvTNGJThV9uc63UHKuT12wx +LrXAVQogX7Ieou/WRKUUW+S6AMEP9Daa92UA0WPjlplW+l4HgDNStbXJEFF5zCZC +ZvVO7hI4CzZxbx/o0komKTEklKcSoigsSMs/n9DUWqd+rd6lVQRIqKbowPzs65C2 +6BxT6YqVwD4QxGnRCv+T4EFxfT2GOmn9e5I3O6oN9pgOinzo8QG9ae9izhFHOnaG ++rgRWl430Djg9wQtv8BBSgxgT2swe6PYr9drE1w7Zi0CAwEAAaOCPc4wgj3KMAwG +A1UdEwQFMAMBAf8wHQYDVR0OBBYEFBItKeGCg0NYb1P7c2KraTOzvBwVMEcGA1Ud +IwRAMD6AFBItKeGCg0NYb1P7c2KraTOzvBwVoSGkHzAdMRswGQYDVQQDDBJ3ZWIt +cGxhdGZvcm0tdGVzdHOCAwbH8zALBgNVHQ8EBAMCAgQwgh+bBgNVHR4Egh+SMIIf jqCCH4owE4IRd2ViLXBsYXRmb3JtLnRlc3QwF4IVb3A4LndlYi1wbGF0Zm9ybS50 ZXN0MBeCFW9wNy53ZWItcGxhdGZvcm0udGVzdDAXghVvcDkud2ViLXBsYXRmb3Jt LnRlc3QwF4IVb3A0LndlYi1wbGF0Zm9ybS50ZXN0MBeCFW5vdC13ZWItcGxhdGZv @@ -337,11 +337,11 @@ d2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3dr cnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2ty cWh2MjhhLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0 gkV4bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4 -YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBAHjDIDWw -i7O1qdt/nBYLqerRN8HqAY6CRWENg50zWKGIPCr2lz2vLDfASy4pUH2ZgPVXWCrN -Nkw2gHUtMYf1KdY6FOVvRvEWbccsUUR/mPDpjxXkbiALo1WHm/h7NSMg4aqyZi8q -IJfWwVOgxCOYj5AroHguRG5NvyQ0pcvrVAYUN03DvnV0AT4jxzDi6mo9zLkpgmsM -GLE4LaHgJfkbhuaX2g0tPSee7pJeXAz/2BaGWyPtb0XGTn5GEPLNDlMKuNCVZewX -k1Ukk3EAUph+VJXTro3qscP4AJRknLLfoM7LIwPgVrN+4bvHA3w0XIlnreQ25dhF -1Z567hdoFFgoHdY= +YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBABJT/1Fz +fcRod/d4XOiprc0e64D9Ohd91E6grSPdIt/xEt5NEUY+E2F4RSuEYcznruGmnYjG +SqRaCk6GKRQRNopYH869EqvfvAuLwpL4ZhJZYlEkq2TVY9FHHyDIuSAZ0LbpNvcQ +68W1hIs9jEJX/WGnaJtOFqrEBY5Ep22+Elm1I+mJmsEbyiKvyw9ovZGGG0HnHODs +PwkQdfsNEgXnH2OcHZpDqt8xc9VWH2gNnJg2XfxfesUHcGhFY4joki+QiMdQRoHs +gc8D0R7QauBhc4NLWwat8EIRjKavmZvr+6QN2kGM4w/LYdX/JW121JWP5PbdwS29 +aRxZsfc6+YK+O+k= -----END CERTIFICATE----- diff --git a/tests/wpt/web-platform-tests/tools/certs/web-platform.test.key b/tests/wpt/web-platform-tests/tools/certs/web-platform.test.key index 0d422053f76..c4f5dc3f2cf 100644 --- a/tests/wpt/web-platform-tests/tools/certs/web-platform.test.key +++ b/tests/wpt/web-platform-tests/tools/certs/web-platform.test.key @@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- -MIIEugIBADANBgkqhkiG9w0BAQEFAASCBKQwggSgAgEAAoIBAQDIC2Z1QbJG1A+y -gY1nqcGHWaXyNIFx4uwS0h88ayz8kE6c2JEvUqfMYVuC40f1chv63rsruV9Pusn+ -fptnshAyOcbko5R6Hpw5hHFPGztfhmPMn8swt+FO8FpJNCyx0X5bRG6+N/UyQpra -WsLpuYUNlIUCirZGBLFX6Uwk2gQWzxY9NUSBue8azNm3l6NskbyURReX27SxaKpW -3Q8Yt3ay0j0QM6DD7KZ4Dvk9zlbLPStFB2lukV3a+M+YpAyG8jYR5Py40ZkJ4RIc -yWLvel3dERHraxSAU2hTWsScxCli7mMhDbUtoCfkpP4Wh0H2hT5dIc/ATDbO39dJ -l2vmphtNAgMBAAECggEAHQKKOTbtw5e9LwXam83iYt59UkKLAxkFYzVVkk14mKfU -vqopY9N4wgrcWn7bUJzbseXa/txDFizgXie+IauQ7bezQDT4szz9KtoqFG6+jXvP -vTzvGoGQCwKQFU2bra3TxSiHZs52oHNIQaIn4f0lbnK7V0MGa+ECVt1eTXnQXf4o -M1dkN6NHvizwG9YWZf3EdgVRmSnFl2IoiCkw4kjh76iHD02OgOpMtFEKScirxGbo -OFZGcQ3nID0rcGlPqA0IeM1LblS8qFH2DlE+I4cDDoLsHIREZaE6BZtttdvGnGo6 -2fNv6U5K/NFVonWXWQF9EIunm509LrIOcfttmOoMAQKBgQD30rrNOfeRxJ1F2Ucf -1dEY0sI1KHJHkXYITWfsair39CqmObehICUN62vlp7dvcSJQ7H5QNNymbUoSWq5I -jtUTpNV4GGpGREenx4CrXsJBcosoKX6SGuUrUk/kpvurgGaMphNEMnCjO9oEo6R2 -xPTy1mJN1HhOPrkgOnYyLOS3uQKBgQDOpRonk2i8+WZbmupP+jIiyrq0yudOEDlQ -vEQxBqLKzCn+fgKFtu+9po5tXmnuweXvDZYPi+fISV1mrlEhdFL+ERt4rVQQexPb -PdCR8R6Bi/pr7XE5ucAiGXYZPsssNa+5D7YU1wgvBthExHgUEQCdyb7bXlZB4nz8 -xLxjadGiNQKBgCVaV9mTASOxdNsQUs4Tlj6dlbQZcpAi9p1tvVo+7lcNMFh5npnk -lHEyqMKmstlTPg7gdnF0ZkWXd3CoxlgdXzRkxeAiHfKVXA+H3Hb4A2OF9j+JcZBo -CV6sO2qFWK2S3uIYLhM7XwrbfJLyb1mPejQX6B0/BxsUDSc0aJhLd/XRAn91Cw7F -W7j3UEuplxUgN5YuHqWhwUtB6+6KzBfTrO6H7xvaCYVkNzmTMcN6Lv/RPAIAZLGa -HKQrzWIZxqItULWxMf9dWs9ChnO4ukpoXynoNmCgwNxg1dT9e25o3ig14jKln0CC -jUkVWcslKCLbOsYemSaBGe3BY4dnpAcQR991AoGAR5F0Q8rd8WleWFDJAOY2t5jR -oqQ98iH2pQ23fFxwnebnPnyMsX0bG+zXuHtGpEEuFOGc7xqjNTm8MigLcLZ0PAzO -tscuFcjPG6QwWVjylC2/7+DiAiOHrhsx8jEXMc63Rb9fn3ILH55ZOeZig+A3+ZLk -pDcbFQ8tKaSChRCy6c0= +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDuGifF9hdWxBC2 +YF7bXIO7xXEREIQw97SL8LEuc7gHfG+0PCya8YNsDssxVdf0xb9Z0XbP4ApKn+Vg +6aTiTHFYXrQdlyU/o5sVbC3dDInFA3BKBhDOIltHAqIcq1HlFJrq+5wheh+Wv22F +i2Ceix8cVImA6aJdWLVds/bSLQgLPR0Ez1EP2FHaXZCZvtgFXk2oym6oei1OopZB +l/AF9sOybD/U2cao6xIX6EIkwgLXrC+Bh7lJLKvX6I8nGKUF3KFwO5RsU50j7d5S +3U+38QsB8n46QNGgCMAWwe0GoVRnH3SVgR9zGVsS02NLUi3ciGzHnahjYP3Tj8wM +AR5KH+UbAgMBAAECggEBAIPNKrMklKrNActS8W9QeQOaOgqOL/7DP8gvRoVGPVq3 +gUYuASsMAgnw7n2y3UZ7qH7ZuoE7rba9aEYLT+CNHDkkw2OV5WKi+BgVuBWi+Sh7 +zM7NKMRStGBMjtx74WuDynXFLhpB9faGpOPF0Ygxztjp2uvnaJ9vmYXzNvAFSWye +KHfj72vFTvLsyrwhEMz0+t6pviiXTZdqTBkZbkbEUN73YQFEsiCNxzoL8SAn4klh +wFPJdC2AWGXd+FQYUkiYeoocGN01cSlVPCJgv7hwjPCM8ZPXwZWhUxg2RgQHgn8q +mbPzk8m3gCgrHh5pMmm/V0Zwm3Y4SAEqcmXn9zDtl2ECgYEA+Pw5vKogtT0OC2aK +SH4MRq9BU+LoC4XkoFilxvZ4n54hEwovau2f4l+fOhL37kWkzgMPHp15tfw3dhb4 +9KUVI7Lu4eNqcjxa0FWnmLxaJMKVo4/fuD3283Fy3feT4p8m8gowUT4fT9PaAQY1 +qwO6W2Y8KyAzb1EMDnjc0KYu5QkCgYEA9M9v3B901kPyi3IYZe/NYM7aUgluWodF +ge5+6oX7uRsjBeQZgRvXz+8/gswpYkh4anHwqm2uiyy6NrNIRqY5oYpjf1131e/7 +rgkzKNqlscflHdbIw9Gg1PnPKb6qt/nBJtUebE7zOmaRIJq6ItPwB/8jsCm7zWqa +hbnohqbNBgMCgYEAxjt6dH03AVUU43rGSiUg/P33kyQq/1GgzxEFG72MF/k79/65 +9fYuv3rGOOR1RN1p8yN4XDWge4XNWlW77Huqsvt5OZtoWn83BnvLrcz4MCBEJy8b +PYMIJJaEj7jXoyx3Q2ldQrGlGFdhUENzYy7apn5lFSjUCqKKaNNNa0mEOJECgYAU +Y1o7iNsgJRSEDIJ/qtL95vxDrMll/LILOiOTwIjQR7RI/1AocnsstA4kBIDF0KdG +piqW5v+MU7NGbvPr/lf6Xh4fM1eRl6TsP5PlKSB3h+BK9eJOfJzaX9ui7GAnZkNx +ynn4JzMWgAhCIOCzmdb5s4PzXeZoGyK3VF5LKIUWpQKBgFem49WIPYZwuJKO+Gjt +9CdlY5bUyb1z//lxpSxX99YWn4Azo5cNjKI5wo+k/0b7DT1grUqiviv50UxE7XoW ++0DZvgDXvWrr/7c92ARazNGr/gTe2D7TWyIKhyQ9Zrv1dH1NIEjouvXzkLsfB0tY +eiC3cV07lWvFpXUGIzkzIqpQ -----END PRIVATE KEY----- diff --git a/tests/wpt/web-platform-tests/tools/certs/web-platform.test.pem b/tests/wpt/web-platform-tests/tools/certs/web-platform.test.pem index e7b1b018466..438f504b2b6 100644 --- a/tests/wpt/web-platform-tests/tools/certs/web-platform.test.pem +++ b/tests/wpt/web-platform-tests/tools/certs/web-platform.test.pem @@ -1,43 +1,43 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 779096 (0xbe358) - Signature Algorithm: sha256WithRSAEncryption + Serial Number: 444404 (0x6c7f4) + Signature Algorithm: sha256WithRSAEncryption Issuer: CN=web-platform-tests Validity - Not Before: Jul 30 20:12:48 2020 GMT - Not After : Oct 8 20:12:48 2022 GMT + Not Before: Sep 12 00:25:31 2020 GMT + Not After : Sep 12 00:25:31 2021 GMT Subject: CN=web-platform.test Subject Public Key Info: Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) + RSA Public-Key: (2048 bit) Modulus: - 00:c8:0b:66:75:41:b2:46:d4:0f:b2:81:8d:67:a9: - c1:87:59:a5:f2:34:81:71:e2:ec:12:d2:1f:3c:6b: - 2c:fc:90:4e:9c:d8:91:2f:52:a7:cc:61:5b:82:e3: - 47:f5:72:1b:fa:de:bb:2b:b9:5f:4f:ba:c9:fe:7e: - 9b:67:b2:10:32:39:c6:e4:a3:94:7a:1e:9c:39:84: - 71:4f:1b:3b:5f:86:63:cc:9f:cb:30:b7:e1:4e:f0: - 5a:49:34:2c:b1:d1:7e:5b:44:6e:be:37:f5:32:42: - 9a:da:5a:c2:e9:b9:85:0d:94:85:02:8a:b6:46:04: - b1:57:e9:4c:24:da:04:16:cf:16:3d:35:44:81:b9: - ef:1a:cc:d9:b7:97:a3:6c:91:bc:94:45:17:97:db: - b4:b1:68:aa:56:dd:0f:18:b7:76:b2:d2:3d:10:33: - a0:c3:ec:a6:78:0e:f9:3d:ce:56:cb:3d:2b:45:07: - 69:6e:91:5d:da:f8:cf:98:a4:0c:86:f2:36:11:e4: - fc:b8:d1:99:09:e1:12:1c:c9:62:ef:7a:5d:dd:11: - 11:eb:6b:14:80:53:68:53:5a:c4:9c:c4:29:62:ee: - 63:21:0d:b5:2d:a0:27:e4:a4:fe:16:87:41:f6:85: - 3e:5d:21:cf:c0:4c:36:ce:df:d7:49:97:6b:e6:a6: - 1b:4d + 00:ee:1a:27:c5:f6:17:56:c4:10:b6:60:5e:db:5c: + 83:bb:c5:71:11:10:84:30:f7:b4:8b:f0:b1:2e:73: + b8:07:7c:6f:b4:3c:2c:9a:f1:83:6c:0e:cb:31:55: + d7:f4:c5:bf:59:d1:76:cf:e0:0a:4a:9f:e5:60:e9: + a4:e2:4c:71:58:5e:b4:1d:97:25:3f:a3:9b:15:6c: + 2d:dd:0c:89:c5:03:70:4a:06:10:ce:22:5b:47:02: + a2:1c:ab:51:e5:14:9a:ea:fb:9c:21:7a:1f:96:bf: + 6d:85:8b:60:9e:8b:1f:1c:54:89:80:e9:a2:5d:58: + b5:5d:b3:f6:d2:2d:08:0b:3d:1d:04:cf:51:0f:d8: + 51:da:5d:90:99:be:d8:05:5e:4d:a8:ca:6e:a8:7a: + 2d:4e:a2:96:41:97:f0:05:f6:c3:b2:6c:3f:d4:d9: + c6:a8:eb:12:17:e8:42:24:c2:02:d7:ac:2f:81:87: + b9:49:2c:ab:d7:e8:8f:27:18:a5:05:dc:a1:70:3b: + 94:6c:53:9d:23:ed:de:52:dd:4f:b7:f1:0b:01:f2: + 7e:3a:40:d1:a0:08:c0:16:c1:ed:06:a1:54:67:1f: + 74:95:81:1f:73:19:5b:12:d3:63:4b:52:2d:dc:88: + 6c:c7:9d:a8:63:60:fd:d3:8f:cc:0c:01:1e:4a:1f: + e5:1b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Subject Key Identifier: - D4:78:96:D1:22:40:93:76:CE:17:EB:B6:70:B6:09:05:E0:A3:17:F8 + 69:30:CF:1C:78:FD:0E:13:3A:FC:91:6A:B2:1D:18:B3:F8:4F:C8:09 X509v3 Authority Key Identifier: - keyid:B3:75:DD:A0:9B:F2:5A:FE:17:8D:80:B1:FC:A7:B7:C1:2B:79:29:2B + keyid:12:2D:29:E1:82:83:43:58:6F:53:FB:73:62:AB:69:33:B3:BC:1C:15 X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment @@ -46,33 +46,33 @@ Certificate: X509v3 Subject Alternative Name: DNS:web-platform.test, DNS:op8.web-platform.test, DNS:op7.web-platform.test, DNS:op9.web-platform.test, DNS:op4.web-platform.test, DNS:not-web-platform.test, DNS:op6.web-platform.test, DNS:op3.web-platform.test, DNS:op2.web-platform.test, DNS:op1.web-platform.test, DNS:www.web-platform.test, DNS:op5.web-platform.test, DNS:op88.web-platform.test, DNS:op98.web-platform.test, DNS:op85.web-platform.test, DNS:op89.web-platform.test, DNS:op66.web-platform.test, DNS:op72.web-platform.test, DNS:op24.web-platform.test, DNS:op41.web-platform.test, DNS:op79.web-platform.test, DNS:op91.web-platform.test, DNS:op59.web-platform.test, DNS:op39.web-platform.test, DNS:op60.web-platform.test, DNS:op58.web-platform.test, DNS:op28.web-platform.test, DNS:www1.web-platform.test, DNS:op14.web-platform.test, DNS:op69.web-platform.test, DNS:op40.web-platform.test, DNS:op74.web-platform.test, DNS:op31.web-platform.test, DNS:op18.web-platform.test, DNS:op73.web-platform.test, DNS:op77.web-platform.test, DNS:op12.web-platform.test, DNS:op54.web-platform.test, DNS:op63.web-platform.test, DNS:op71.web-platform.test, DNS:op95.web-platform.test, DNS:op16.web-platform.test, DNS:op36.web-platform.test, DNS:op27.web-platform.test, DNS:op29.web-platform.test, DNS:op94.web-platform.test, DNS:op44.web-platform.test, DNS:op33.web-platform.test, DNS:op84.web-platform.test, DNS:op32.web-platform.test, DNS:op61.web-platform.test, DNS:op70.web-platform.test, DNS:www2.web-platform.test, DNS:op43.web-platform.test, DNS:op78.web-platform.test, DNS:op26.web-platform.test, DNS:op76.web-platform.test, DNS:op52.web-platform.test, DNS:op99.web-platform.test, DNS:op86.web-platform.test, DNS:op46.web-platform.test, DNS:op17.web-platform.test, DNS:op90.web-platform.test, DNS:op93.web-platform.test, DNS:op10.web-platform.test, DNS:op55.web-platform.test, DNS:op47.web-platform.test, DNS:op51.web-platform.test, DNS:op45.web-platform.test, DNS:op80.web-platform.test, DNS:op68.web-platform.test, DNS:op49.web-platform.test, DNS:op57.web-platform.test, DNS:op35.web-platform.test, DNS:op67.web-platform.test, DNS:op92.web-platform.test, DNS:op15.web-platform.test, DNS:op13.web-platform.test, DNS:op75.web-platform.test, DNS:op64.web-platform.test, DNS:op97.web-platform.test, DNS:op37.web-platform.test, DNS:op56.web-platform.test, DNS:op62.web-platform.test, DNS:op82.web-platform.test, DNS:op25.web-platform.test, DNS:op11.web-platform.test, DNS:op50.web-platform.test, DNS:op38.web-platform.test, DNS:op83.web-platform.test, DNS:op81.web-platform.test, DNS:op20.web-platform.test, DNS:op21.web-platform.test, DNS:op23.web-platform.test, DNS:op42.web-platform.test, DNS:op22.web-platform.test, DNS:op65.web-platform.test, DNS:op96.web-platform.test, DNS:op87.web-platform.test, DNS:op19.web-platform.test, DNS:op53.web-platform.test, DNS:op30.web-platform.test, DNS:op48.web-platform.test, DNS:op34.web-platform.test, DNS:op6.not-web-platform.test, DNS:op3.not-web-platform.test, DNS:op2.not-web-platform.test, DNS:op5.not-web-platform.test, DNS:www.not-web-platform.test, DNS:www.www.web-platform.test, DNS:op7.not-web-platform.test, DNS:op4.not-web-platform.test, DNS:op8.not-web-platform.test, DNS:op9.not-web-platform.test, DNS:op1.not-web-platform.test, DNS:op36.not-web-platform.test, DNS:op53.not-web-platform.test, DNS:op50.not-web-platform.test, DNS:op24.not-web-platform.test, DNS:op31.not-web-platform.test, DNS:op95.not-web-platform.test, DNS:op83.not-web-platform.test, DNS:www2.not-web-platform.test, DNS:op73.not-web-platform.test, DNS:op19.not-web-platform.test, DNS:op21.not-web-platform.test, DNS:op81.not-web-platform.test, DNS:op70.not-web-platform.test, DNS:op78.not-web-platform.test, DNS:op40.not-web-platform.test, DNS:op25.not-web-platform.test, DNS:op65.not-web-platform.test, DNS:www.www2.web-platform.test, DNS:op80.not-web-platform.test, DNS:op52.not-web-platform.test, DNS:op68.not-web-platform.test, DNS:op45.not-web-platform.test, DNS:op71.not-web-platform.test, DNS:op72.not-web-platform.test, DNS:op90.not-web-platform.test, DNS:op89.not-web-platform.test, DNS:op49.not-web-platform.test, DNS:op77.not-web-platform.test, DNS:op79.not-web-platform.test, DNS:op82.not-web-platform.test, DNS:www.www1.web-platform.test, DNS:op12.not-web-platform.test, DNS:op39.not-web-platform.test, DNS:op44.not-web-platform.test, DNS:www1.not-web-platform.test, DNS:op58.not-web-platform.test, DNS:op14.not-web-platform.test, DNS:op30.not-web-platform.test, DNS:op62.not-web-platform.test, DNS:op61.not-web-platform.test, DNS:op92.not-web-platform.test, DNS:op29.not-web-platform.test, DNS:op98.not-web-platform.test, DNS:op64.not-web-platform.test, DNS:op26.not-web-platform.test, DNS:op22.not-web-platform.test, DNS:op94.not-web-platform.test, DNS:op38.not-web-platform.test, DNS:op33.not-web-platform.test, DNS:op23.not-web-platform.test, DNS:op57.not-web-platform.test, DNS:op54.not-web-platform.test, DNS:op85.not-web-platform.test, DNS:op46.not-web-platform.test, DNS:op97.not-web-platform.test, DNS:op32.not-web-platform.test, DNS:op60.not-web-platform.test, DNS:op96.not-web-platform.test, DNS:op51.not-web-platform.test, DNS:op41.not-web-platform.test, DNS:op35.not-web-platform.test, DNS:op99.not-web-platform.test, DNS:op42.not-web-platform.test, DNS:op67.not-web-platform.test, DNS:op37.not-web-platform.test, DNS:op48.not-web-platform.test, DNS:op55.not-web-platform.test, DNS:op56.not-web-platform.test, DNS:op84.not-web-platform.test, DNS:op34.not-web-platform.test, DNS:op69.not-web-platform.test, DNS:op11.not-web-platform.test, DNS:op93.not-web-platform.test, DNS:www1.www.web-platform.test, DNS:op86.not-web-platform.test, DNS:op13.not-web-platform.test, DNS:op20.not-web-platform.test, DNS:op76.not-web-platform.test, DNS:op27.not-web-platform.test, DNS:op17.not-web-platform.test, DNS:op75.not-web-platform.test, DNS:op15.not-web-platform.test, DNS:op47.not-web-platform.test, DNS:op18.not-web-platform.test, DNS:op63.not-web-platform.test, DNS:op28.not-web-platform.test, DNS:op43.not-web-platform.test, DNS:op66.not-web-platform.test, DNS:www2.www.web-platform.test, DNS:op91.not-web-platform.test, DNS:op74.not-web-platform.test, DNS:op59.not-web-platform.test, DNS:op88.not-web-platform.test, DNS:op87.not-web-platform.test, DNS:op10.not-web-platform.test, DNS:op16.not-web-platform.test, DNS:www1.www2.web-platform.test, DNS:www2.www2.web-platform.test, DNS:www2.www1.web-platform.test, DNS:www1.www1.web-platform.test, DNS:www.www.not-web-platform.test, DNS:xn--lve-6lad.web-platform.test, DNS:www1.www.not-web-platform.test, DNS:www.www2.not-web-platform.test, DNS:www2.www.not-web-platform.test, DNS:www.www1.not-web-platform.test, DNS:www2.www2.not-web-platform.test, DNS:www2.www1.not-web-platform.test, DNS:www1.www1.not-web-platform.test, DNS:www1.www2.not-web-platform.test, DNS:xn--lve-6lad.www.web-platform.test, DNS:xn--lve-6lad.not-web-platform.test, DNS:www.xn--lve-6lad.web-platform.test, DNS:www2.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www2.web-platform.test, DNS:xn--lve-6lad.www1.web-platform.test, DNS:www1.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www.not-web-platform.test, DNS:www.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www1.not-web-platform.test, DNS:www2.xn--lve-6lad.not-web-platform.test, DNS:www1.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www2.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.not-web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.not-web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test Signature Algorithm: sha256WithRSAEncryption - 87:1a:f7:82:48:e1:85:0a:cd:c9:eb:26:3a:f0:d2:70:1e:cc: - 1e:1e:8f:61:ed:41:a5:72:4c:0b:dd:7f:9f:6d:eb:f6:96:6c: - f5:41:3d:78:6e:69:74:bb:49:d4:d1:8b:e1:5f:c9:1e:43:7f: - 19:6b:db:fe:37:52:d7:3a:88:a9:29:df:64:63:ae:82:2d:e1: - 8f:19:10:13:8a:73:c6:8d:ae:ca:99:50:89:49:90:a5:4f:cf: - ec:13:5b:2f:eb:dc:a0:d2:53:15:1a:d1:93:4c:47:f0:9b:6f: - 65:1a:51:e2:4b:73:56:de:57:2a:11:ad:5a:68:92:ad:36:be: - b8:f5:b9:72:28:b8:ec:d7:55:d1:0d:e1:40:27:b9:e4:2b:c0: - de:a1:e9:38:25:4e:b6:43:dc:1a:0b:38:96:2b:14:5f:88:1a: - 75:92:fc:bf:76:3a:23:96:37:7f:f4:83:62:8e:fd:5f:29:06: - 0c:52:2b:e5:23:95:9b:0f:b0:1e:1a:bb:99:b4:3c:1b:83:c9: - 4d:f5:b7:2c:6b:98:fa:67:48:63:8a:9e:1e:6c:ef:cb:d4:eb: - 82:a8:49:21:68:a2:d1:34:35:b0:9b:ef:a8:51:22:8b:3a:fd: - 87:8e:5a:d6:1f:b2:1c:64:c3:10:e2:7d:b6:c9:ce:27:97:16: - 1a:a6:66:4f + 70:a3:c2:d4:02:32:83:2c:57:4e:cf:42:0e:d6:50:c1:40:2f: + 75:84:54:26:ed:21:7b:5e:97:94:ed:ff:43:15:33:4c:fe:eb: + b8:d9:a2:ac:ca:ad:59:e7:52:cf:74:59:62:df:a6:01:e5:d5: + 53:04:6c:97:87:7e:2c:da:44:dd:64:ec:cc:1a:ab:38:99:65: + e1:f6:94:59:b7:65:b3:a6:e5:21:7d:96:04:0e:87:d9:13:32: + 27:50:11:7a:01:7d:6e:a9:42:b1:78:40:4f:0a:89:18:0b:8d: + 7a:a2:73:39:88:8c:49:da:17:91:6b:c7:2f:ee:7e:79:4e:f5: + aa:97:1a:28:c6:5d:89:eb:5e:bc:68:ac:e9:dd:c8:6f:89:50: + 34:c2:fe:69:70:7a:ce:6b:ef:09:fb:f6:9d:a1:d8:eb:2f:e6: + 44:1d:1d:f6:e4:97:e4:0e:3e:a5:cc:8b:5b:5b:8c:7c:8c:57: + b9:d3:c4:a2:ac:98:c2:91:8b:b9:7f:5a:a6:fb:e4:fb:5b:0b: + 11:c2:e2:4a:62:d0:98:d0:f9:77:c6:eb:72:b5:92:0d:e6:5d: + 3c:20:f9:d6:0e:60:2c:45:0f:b9:67:e7:b7:05:9c:a1:a0:e0: + 3b:40:52:56:fb:64:12:85:f7:56:9e:2d:8c:12:a0:c1:58:27: + 56:0d:af:d8 -----BEGIN CERTIFICATE----- -MIIgvDCCH6SgAwIBAgIDC+NYMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl -Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMDA3MzAyMDEyNDhaFw0yMjEwMDgyMDEyNDha +MIIgvDCCH6SgAwIBAgIDBsf0MA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl +Yi1wbGF0Zm9ybS10ZXN0czAeFw0yMDA5MTIwMDI1MzFaFw0yMTA5MTIwMDI1MzFa MBwxGjAYBgNVBAMMEXdlYi1wbGF0Zm9ybS50ZXN0MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAyAtmdUGyRtQPsoGNZ6nBh1ml8jSBceLsEtIfPGss/JBO -nNiRL1KnzGFbguNH9XIb+t67K7lfT7rJ/n6bZ7IQMjnG5KOUeh6cOYRxTxs7X4Zj -zJ/LMLfhTvBaSTQssdF+W0Ruvjf1MkKa2lrC6bmFDZSFAoq2RgSxV+lMJNoEFs8W -PTVEgbnvGszZt5ejbJG8lEUXl9u0sWiqVt0PGLd2stI9EDOgw+ymeA75Pc5Wyz0r -RQdpbpFd2vjPmKQMhvI2EeT8uNGZCeESHMli73pd3RER62sUgFNoU1rEnMQpYu5j -IQ21LaAn5KT+FodB9oU+XSHPwEw2zt/XSZdr5qYbTQIDAQABo4IeBDCCHgAwCQYD -VR0TBAIwADAdBgNVHQ4EFgQU1HiW0SJAk3bOF+u2cLYJBeCjF/gwHwYDVR0jBBgw -FoAUs3XdoJvyWv4XjYCx/Ke3wSt5KSswCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoG +AAOCAQ8AMIIBCgKCAQEA7honxfYXVsQQtmBe21yDu8VxERCEMPe0i/CxLnO4B3xv +tDwsmvGDbA7LMVXX9MW/WdF2z+AKSp/lYOmk4kxxWF60HZclP6ObFWwt3QyJxQNw +SgYQziJbRwKiHKtR5RSa6vucIXoflr9thYtgnosfHFSJgOmiXVi1XbP20i0ICz0d +BM9RD9hR2l2Qmb7YBV5NqMpuqHotTqKWQZfwBfbDsmw/1NnGqOsSF+hCJMIC16wv +gYe5SSyr1+iPJxilBdyhcDuUbFOdI+3eUt1Pt/ELAfJ+OkDRoAjAFsHtBqFUZx90 +lYEfcxlbEtNjS1It3Ihsx52oY2D904/MDAEeSh/lGwIDAQABo4IeBDCCHgAwCQYD +VR0TBAIwADAdBgNVHQ4EFgQUaTDPHHj9DhM6/JFqsh0Ys/hPyAkwHwYDVR0jBBgw +FoAUEi0p4YKDQ1hvU/tzYqtpM7O8HBUwCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoG CCsGAQUFBwMBMIIdjwYDVR0RBIIdhjCCHYKCEXdlYi1wbGF0Zm9ybS50ZXN0ghVv cDgud2ViLXBsYXRmb3JtLnRlc3SCFW9wNy53ZWItcGxhdGZvcm0udGVzdIIVb3A5 LndlYi1wbGF0Zm9ybS50ZXN0ghVvcDQud2ViLXBsYXRmb3JtLnRlc3SCFW5vdC13 @@ -231,10 +231,10 @@ NmxhZC54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRl c3SCQXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1uOGo2ZHM1M2x3d2tycWh2 MjhhLndlYi1wbGF0Zm9ybS50ZXN0gkV4bi0tbjhqNmRzNTNsd3drcnFodjI4YS54 bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJ -KoZIhvcNAQELBQADggEBAIca94JI4YUKzcnrJjrw0nAezB4ej2HtQaVyTAvdf59t -6/aWbPVBPXhuaXS7SdTRi+FfyR5Dfxlr2/43Utc6iKkp32RjroIt4Y8ZEBOKc8aN -rsqZUIlJkKVPz+wTWy/r3KDSUxUa0ZNMR/Cbb2UaUeJLc1beVyoRrVpokq02vrj1 -uXIouOzXVdEN4UAnueQrwN6h6TglTrZD3BoLOJYrFF+IGnWS/L92OiOWN3/0g2KO -/V8pBgxSK+UjlZsPsB4au5m0PBuDyU31tyxrmPpnSGOKnh5s78vU64KoSSFootE0 -NbCb76hRIos6/YeOWtYfshxkwxDifbbJzieXFhqmZk8= +KoZIhvcNAQELBQADggEBAHCjwtQCMoMsV07PQg7WUMFAL3WEVCbtIXtel5Tt/0MV +M0z+67jZoqzKrVnnUs90WWLfpgHl1VMEbJeHfizaRN1k7MwaqziZZeH2lFm3ZbOm +5SF9lgQOh9kTMidQEXoBfW6pQrF4QE8KiRgLjXqiczmIjEnaF5Frxy/ufnlO9aqX +GijGXYnrXrxorOndyG+JUDTC/mlwes5r7wn79p2h2Osv5kQdHfbkl+QOPqXMi1tb +jHyMV7nTxKKsmMKRi7l/Wqb75PtbCxHC4kpi0JjQ+XfG63K1kg3mXTwg+dYOYCxF +D7ln57cFnKGg4DtAUlb7ZBKF91aeLYwSoMFYJ1YNr9g= -----END CERTIFICATE----- diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py index 880e2bd43eb..486070ad86d 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py @@ -69,7 +69,6 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data, # browsing context, whereas the CLI flag works for workers, too. chrome_options["args"] = [] - chrome_options["args"].append("--ignore-certificate-errors") chrome_options["args"].append("--ignore-certificate-errors-spki-list=%s" % ','.join(chrome_spki_certs.IGNORE_CERTIFICATE_ERRORS_SPKI_LIST)) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py index e8971e7acde..289453bd080 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_spki_certs.py @@ -2,7 +2,7 @@ # DO NOT EDIT MANUALLY. # tools/certs/web-platform.test.pem -WPT_FINGERPRINT = 'VPzsk0tdACJMqhsnPpMDesIkQYZrI2RGR+UlPK4emE4=' +WPT_FINGERPRINT = 'Jjw17d8tPl/0TWUbC9g897DgEswu02sENyt5VUgT0wI=' # signed-exchange/resources/127.0.0.1.sxg.pem SXG_WPT_FINGERPRINT = '0Rt4mT6SJXojEMHTnKnlJ/hBKMBcI4kteBlhR1eTTdk=' diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/chromium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/chromium.py index 0c2fc408138..cef01c4ffc5 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/chromium.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/chromium.py @@ -41,20 +41,38 @@ class ChromiumFormatter(base.BaseFormatter): # Browser log for the current test under execution. self.test_log = [] - def _append_test_message(self, test, subtest, status, expected, message): + def _append_test_message(self, test, subtest, wpt_actual_status, message): """ - Appends the message data for a test. + Appends the message data for a test or subtest. :param str test: the name of the test - :param str subtest: the name of the subtest with the message - :param str status: the subtest status - :param str expected: the expected subtest statuses + :param str subtest: the name of the subtest with the message. Will be + None if this is called for a test. + :param str wpt_actual_status: the test status as reported by WPT :param str message: the string to append to the message for this test Example: - [subtest foo] [FAIL expected PASS] message + [test_or_subtest_name] + expected: FAIL + message: some test message eg assert failure """ - self.messages[test].append("[%s] [%s expected %s] %s" % - (subtest, status, expected, message)) + # NOTE: throughout this function we output a key called "expected" but + # fill it in with the actual status. This is by design. The goal of this + # output is to look exactly like WPT's expectation metadata so that it + # can be easily diff-ed. + if subtest: + result = " [%s]\n expected: %s\n" % (subtest, wpt_actual_status) + if message: + result += " message: %s\n" % message + self.messages[test].append(result) + else: + # No subtest, so this is the top-level test. The result must be + # prepended to the list of messages, so that the message for the + # test comes before any subtest messages. + test_name_last_part = test.split("/")[-1] + result = "[%s]\n expected: %s\n" % (test_name_last_part, wpt_actual_status) + if message: + result += " message: %s\n" % message + self.messages[test].insert(0, result) def _append_artifact(self, cur_dict, artifact_name, artifact_value): """ @@ -175,15 +193,18 @@ class ChromiumFormatter(base.BaseFormatter): def test_status(self, data): test_name = data["test"] - actual_status = self._map_status_name(data["status"]) + wpt_actual_status = data["status"] + actual_status = self._map_status_name(wpt_actual_status) expected_statuses = self._get_expected_status_from_data(actual_status, data) is_unexpected = actual_status not in expected_statuses if is_unexpected and test_name not in self.tests_with_subtest_fails: self.tests_with_subtest_fails.add(test_name) - self._append_test_message(test_name, data.get("subtest", ""), - actual_status, expected_statuses, - data.get("message", "")) + # We should always get a subtest in the data dict, but it's technically + # possible that it's missing. Be resilient here. + subtest_name = data.get("subtest", "UNKNOWN SUBTEST") + self._append_test_message(test_name, subtest_name, + wpt_actual_status, data.get("message", "")) def test_end(self, data): test_name = data["test"] @@ -203,8 +224,7 @@ class ChromiumFormatter(base.BaseFormatter): if actual_status == "PASS": actual_status = "FAIL" - self._append_test_message(test_name, "", - actual_status, expected_statuses, + self._append_test_message(test_name, None, wpt_actual_status, data.get("message", "")) self._store_test_result(test_name, actual_status, diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/tests/test_chromium.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/tests/test_chromium.py index 59f39c1e71b..8f8e732d473 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/tests/test_chromium.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/formatters/tests/test_chromium.py @@ -158,15 +158,15 @@ def test_subtest_messages(capfd): t1_artifacts = output_json["tests"]["t1"]["artifacts"] assert t1_artifacts["log"] == [ - "[t1_a] [FAIL expected PASS] t1_a_message", - "[t1_b] [PASS expected PASS] t1_b_message", - "[] [FAIL expected PASS] ", + "[t1]\n expected: PASS\n", + " [t1_a]\n expected: FAIL\n message: t1_a_message\n", + " [t1_b]\n expected: PASS\n message: t1_b_message\n", ] assert t1_artifacts["wpt_subtest_failure"] == ["true"] t2_artifacts = output_json["tests"]["t2"]["artifacts"] assert t2_artifacts["log"] == [ - "[t2_a] [PASS expected PASS] ", - "[] [TIMEOUT expected PASS] t2_message", + "[t2]\n expected: TIMEOUT\n message: t2_message\n", + " [t2_a]\n expected: PASS\n", ] assert "wpt_subtest_failure" not in t2_artifacts.keys() @@ -195,7 +195,7 @@ def test_subtest_failure(capfd): # The test status is reported as a pass here because the harness was able to # run the test to completion. - logger.test_end("t1", status="PASS", expected="PASS") + logger.test_end("t1", status="PASS", expected="PASS", message="top_message") logger.suite_end() # check nothing got output to stdout/stderr @@ -211,10 +211,10 @@ def test_subtest_failure(capfd): test_obj = output_json["tests"]["t1"] t1_artifacts = test_obj["artifacts"] assert t1_artifacts["log"] == [ - "[t1_a] [FAIL expected PASS] t1_a_message", - "[t1_b] [PASS expected PASS] t1_b_message", - "[t1_c] [TIMEOUT expected PASS] t1_c_message", - "[] [FAIL expected PASS] ", + "[t1]\n expected: PASS\n message: top_message\n", + " [t1_a]\n expected: FAIL\n message: t1_a_message\n", + " [t1_b]\n expected: PASS\n message: t1_b_message\n", + " [t1_c]\n expected: TIMEOUT\n message: t1_c_message\n", ] assert t1_artifacts["wpt_subtest_failure"] == ["true"] # The status of the test in the output is a failure because subtests failed, @@ -252,7 +252,7 @@ def test_expected_subtest_failure(capfd): # The test status is reported as a pass here because the harness was able to # run the test to completion. - logger.test_end("t1", status="PASS", expected="PASS") + logger.test_end("t1", status="OK", expected="OK") logger.suite_end() # check nothing got output to stdout/stderr @@ -267,11 +267,12 @@ def test_expected_subtest_failure(capfd): test_obj = output_json["tests"]["t1"] t1_log = test_obj["artifacts"]["log"] + print("Lpz t1log=%s" % t1_log) assert t1_log == [ - "[t1_a] [FAIL expected FAIL] t1_a_message", - "[t1_b] [PASS expected PASS] t1_b_message", - "[t1_c] [TIMEOUT expected TIMEOUT] t1_c_message", - "[] [PASS expected PASS] ", + "[t1]\n expected: OK\n", + " [t1_a]\n expected: FAIL\n message: t1_a_message\n", + " [t1_b]\n expected: PASS\n message: t1_b_message\n", + " [t1_c]\n expected: TIMEOUT\n message: t1_c_message\n", ] # The status of the test in the output is a pass because the subtest # failures were all expected. @@ -316,8 +317,8 @@ def test_unexpected_subtest_pass(capfd): test_obj = output_json["tests"]["t1"] t1_artifacts = test_obj["artifacts"] assert t1_artifacts["log"] == [ - "[t1_a] [PASS expected FAIL] t1_a_message", - "[] [FAIL expected PASS] ", + "[t1]\n expected: PASS\n", + " [t1_a]\n expected: PASS\n message: t1_a_message\n", ] assert t1_artifacts["wpt_subtest_failure"] == ["true"] # Since the subtest status is unexpected, we fail the test. But we report diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py index 28f407c8065..dbfe067ba7f 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py @@ -169,6 +169,10 @@ class Request(object): Regexp match object from matching the request path to the route selected for the request. + .. attribute:: client_address + + Contains a tuple of the form (host, port) representing the client's address. + .. attribute:: protocol_version HTTP version specified in the request. @@ -245,6 +249,7 @@ class Request(object): def __init__(self, request_handler): self.doc_root = request_handler.server.router.doc_root self.route_match = None # Set by the router + self.client_address = request_handler.client_address self.protocol_version = request_handler.protocol_version self.method = request_handler.command diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py index 56342ed287d..d6718df3f52 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/server.py @@ -528,6 +528,7 @@ class H2HandlerCopy(object): self.h2_stream_id = req_frame.stream_id self.server = handler.server self.protocol_version = handler.protocol_version + self.client_address = handler.client_address self.raw_requestline = '' self.rfile = rfile self.request = handler.request diff --git a/tests/wpt/web-platform-tests/web-bundle/subresource-loading/subresource-loading-from-web-bundle.tentative.html b/tests/wpt/web-platform-tests/web-bundle/subresource-loading/subresource-loading-from-web-bundle.tentative.html index 1e0e78a3204..574a25b6816 100644 --- a/tests/wpt/web-platform-tests/web-bundle/subresource-loading/subresource-loading-from-web-bundle.tentative.html +++ b/tests/wpt/web-platform-tests/web-bundle/subresource-loading/subresource-loading-from-web-bundle.tentative.html @@ -16,6 +16,18 @@ }, "Subresource loading with WebBundle"); promise_test(async () => { + const response = await fetch('http://web-platform.test:8001/root.js'); + const text = await response.text(); + assert_equals(text, "export * from './submodule.js';\n"); + }, "Subresource loading with WebBundle (Fetch API)"); + + promise_test(t => { + const url = + '/common/redirect.py?location=http://web-platform.test:8001/root.js'; + return promise_rejects_js(t, TypeError, import(url)); + }, "Subresource loading with WebBundle shouldn't affect redirect"); + + promise_test(async () => { const link = document.createElement("link"); link.rel = "webbundle"; link.href = "../resources/wbn/dynamic1.wbn"; diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html new file mode 100644 index 00000000000..11fc4e4fa0c --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-connectionSetup.html @@ -0,0 +1,106 @@ +<!doctype html> +<title>Test RTCPeerConnection.prototype.addIceCandidate</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="RTCPeerConnection-helper.js"></script> +<script> + 'use strict'; + +// This test may be flaky, so it's in its own file. +// The test belongs in RTCPeerConnection-addIceCandidate. + +promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + const transceiver = pc1.addTransceiver('video'); + + exchangeIceCandidates(pc1, pc2); + await exchangeOffer(pc1, pc2); + const answer = await pc2.createAnswer(); + // Note that sequence of the following two calls is critical + // for test stability. + await pc1.setRemoteDescription(answer); + await pc2.setLocalDescription(answer); + await waitForState(transceiver.sender.transport, 'connected'); +}, 'Candidates are added dynamically; connection should work'); + +promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + const transceiver = pc1.addTransceiver('video'); + + let candidates1to2 = []; + let candidates2to1 = []; + pc1.onicecandidate = event => { + if (event.candidate) { + candidates1to2.push(event.candidate); + } + } + pc2.onicecandidate = event => { + if (event.candidate) { + candidates2to1.push(event.candidate); + } + } + const pc2GatheredCandidates = new Promise((resolve) => { + pc2.addEventListener('icegatheringstatechange', () => { + if (pc2.iceGatheringState == 'complete') { + resolve(); + } + }); + }); + await exchangeOffer(pc1, pc2); + let answer = await pc2.createAnswer(); + await pc1.setRemoteDescription(answer); + await pc2.setLocalDescription(answer); + await pc2GatheredCandidates; + // Add candidates to pc1, ensuring that it goes to "connecting" state before "connected". + for (let candidate of candidates2to1) { + await pc1.addIceCandidate(candidate); + } + await waitForState(transceiver.sender.transport, 'connecting'); + await waitForState(transceiver.sender.transport, 'connected'); +}, 'Candidates are added at PC1; connection should work'); + +promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + const transceiver = pc1.addTransceiver('video'); + + let candidates1to2 = []; + let candidates2to1 = []; + pc1.onicecandidate = event => { + if (event.candidate) { + candidates1to2.push(event.candidate); + } + } + pc2.onicecandidate = event => { + if (event.candidate) { + candidates2to1.push(event.candidate); + } + } + const pc1GatheredCandidates = new Promise((resolve) => { + pc1.addEventListener('icegatheringstatechange', () => { + if (pc1.iceGatheringState == 'complete') { + resolve(); + } + }); + }); + await exchangeOffer(pc1, pc2); + let answer = await pc2.createAnswer(); + await pc1.setRemoteDescription(answer); + await pc2.setLocalDescription(answer); + await pc1GatheredCandidates; + // Add candidates to pc2 + for (let candidate of candidates1to2) { + await pc2.addIceCandidate(candidate); + } + await waitForState(transceiver.sender.transport, 'connected'); +}, 'Candidates are added at PC2; connection should work'); + +</script> diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html index c68e442a2d5..5fcb6e864a8 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate.html @@ -2,6 +2,7 @@ <title>Test RTCPeerConnection.prototype.addIceCandidate</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> +<script src="RTCPeerConnection-helper.js"></script> <script> 'use strict'; @@ -224,18 +225,20 @@ a=rtcp-rsize pc.addIceCandidate({usernameFragment: "no such ufrag"})); }, 'addIceCandidate({usernameFragment: "no such ufrag"}) should not work'); - promise_test(t => { + promise_test(async t => { const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); - return pc.setRemoteDescription(sessionDesc) - .then(() => pc.addIceCandidate({ + await pc.setRemoteDescription(sessionDesc) + await pc.addIceCandidate({ candidate: candidateStr1, sdpMid: sdpMid1, sdpMLineIndex: sdpMLineIndex1, usernameFragement: usernameFragment1 - })); + }); + assert_candidate_line_after(pc.remoteDescription.sdp, + mediaLine1, candidateStr1); }, 'Add ICE candidate after setting remote description should succeed'); promise_test(t => { @@ -256,7 +259,6 @@ a=rtcp-rsize const pc = new RTCPeerConnection(); t.add_cleanup(() => pc.close()); - return pc.setRemoteDescription(sessionDesc) .then(() => pc.addIceCandidate({ candidate: candidateStr1, diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper-test.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper-test.html new file mode 100644 index 00000000000..42f6652ac4c --- /dev/null +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-helper-test.html @@ -0,0 +1,21 @@ +<!doctype html> +<meta charset=utf-8> +<title>RTCPeerConnection-helper tests</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="RTCPeerConnection-helper.js"></script> +<script> +'use strict'; + +promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + const transceiver = pc1.addTransceiver('video'); + + exchangeIceCandidates(pc1, pc2); + await exchangeOfferAnswer(pc1, pc2); + await waitForState(transceiver.sender.transport, 'connected'); +}, 'Setting up a connection using helpers and defaults should work'); +</script> diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html index a8056d473cd..9bbab30d56e 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html @@ -248,18 +248,14 @@ const offer = await pc1.createOffer(); await pc1.setLocalDescription(offer); - assert_false(pc1.getTransceivers()[0].stopped, 'Transceiver is not stopped'); - await pc2.setRemoteDescription(offer); pc2.getTransceivers()[0].stop(); const answer = await pc2.createAnswer(); await pc1.setRemoteDescription(answer); - assert_true(pc1.getTransceivers()[0].stopped, 'Transceiver is stopped'); - assert_equals(pc1.getReceivers().length, 0, 'getReceivers does not expose a receiver of a stopped transceiver'); - assert_equals(pc1.getSenders().length, 0, 'getSenders does not expose a sender of a stopped transceiver'); - }, 'setRemoteDescription should stop the transceiver if its corresponding m section is rejected'); + assert_equals(pc1.getTransceivers()[0].currentDirection, 'inactive', 'A stopped m-line should give an inactive transceiver'); + }, 'setRemoteDescription should set transceiver inactive if its corresponding m section is rejected'); /* TODO diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html index 412736b1d19..2e1dcbb0d95 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html @@ -199,7 +199,6 @@ direction: "sendrecv", mid: null, currentDirection: null, - stopped: false }, { receiver: {track: {kind: "video", readyState: "live", muted: true}}, @@ -207,7 +206,6 @@ direction: "sendrecv", mid: null, currentDirection: null, - stopped: false } ]); }; @@ -232,7 +230,6 @@ direction: "sendrecv", mid: null, currentDirection: null, - stopped: false }, { receiver: {track: {kind: "video"}}, @@ -240,7 +237,6 @@ direction: "sendrecv", mid: null, currentDirection: null, - stopped: false } ]); }; @@ -265,7 +261,6 @@ direction: "sendrecv", mid: null, currentDirection: null, - stopped: false }, { receiver: {track: {kind: "video"}}, @@ -273,7 +268,6 @@ direction: "sendrecv", mid: null, currentDirection: null, - stopped: false } ]); }; @@ -293,7 +287,6 @@ direction: "recvonly", mid: null, currentDirection: null, - stopped: false }, { receiver: {track: {kind: "video"}}, @@ -301,7 +294,6 @@ direction: "recvonly", mid: null, currentDirection: null, - stopped: false } ]); }; @@ -336,7 +328,6 @@ sender: {track: null}, direction: "recvonly", currentDirection: null, - stopped: false } ]); }; @@ -365,7 +356,6 @@ // rtcweb-jsep says this is recvonly, w3c-webrtc does not... direction: "recvonly", currentDirection: null, - stopped: false } ]); }; @@ -435,7 +425,6 @@ sender: {track: null}, direction: "recvonly", currentDirection: null, - stopped: false } ]); @@ -466,7 +455,6 @@ sender: {track: {kind: "audio"}}, direction: "sendrecv", currentDirection: null, - stopped: false } ]); @@ -486,7 +474,6 @@ sender: {track: {kind: "audio"}}, direction: "sendrecv", currentDirection: "sendonly", - stopped: false, mid: lastMid } ]); @@ -500,7 +487,6 @@ sender: {track: {kind: "audio"}}, direction: "sendrecv", currentDirection: "sendonly", - stopped: false, mid: lastMid } ]); @@ -1253,15 +1239,14 @@ assert_equals(pc1.getSenders().length, 0, 'getSenders does not expose a sender of a stopped transceiver'); await onended; - + // The transceiver has [[stopping]] = true, [[stopped]] = false hasPropsAndUniqueMids(pc1.getTransceivers(), [ { sender: {track: {kind: "audio"}}, receiver: {track: {kind: "audio", readyState: "ended"}}, - stopped: true, - currentDirection: null, - direction: "sendrecv" + currentDirection: "sendrecv", + direction: "stopped" } ]); @@ -1297,15 +1282,16 @@ await onended; + // pc2's transceiver was stopped remotely, so has + // [[stopping]] = true, [[stopped]] = true. hasProps(pc2.getTransceivers(), [ { sender: {track: {kind: "audio"}}, receiver: {track: {kind: "audio", readyState: "ended"}}, - stopped: true, mid: null, - currentDirection: null, - direction: "sendrecv" + currentDirection: "stopped", + direction: "stopped" } ]); @@ -1335,13 +1321,14 @@ let offer = await pc1.createOffer(); - pc1.getTransceivers()[0].stop(); - + const transceiverThatWasStopped = pc1.getTransceivers()[0]; + transceiverThatWasStopped.stop(); await pc2.setRemoteDescription(offer) trickle(t, pc1, pc2); await pc1.setLocalDescription(offer); let answer = await pc2.createAnswer(); + const negotiationNeededAwaiter = negotiationNeeded(pc1); const trackEvents = await setRemoteDescriptionReturnTrackEvents(pc1, answer); // Spec language doesn't say anything about checking whether the transceiver // is stopped here. @@ -1353,16 +1340,20 @@ } ]); + assert_equals(transceiverThatWasStopped, pc1.getTransceivers()[0]); + // The transceiver should still be [[stopping]]=true, [[stopped]]=false. hasPropsAndUniqueMids(pc1.getTransceivers(), [ { - stopped: true, + currentDirection: "sendrecv", + direction: "stopped" } ]); - await negotiationNeeded(pc1); + await negotiationNeededAwaiter; trickle(t, pc2, pc1); + await pc2.setLocalDescription(answer); await iceConnected(pc1); @@ -1374,22 +1365,8 @@ answer = await pc2.createAnswer(); await pc2.setLocalDescription(answer); await pc1.setRemoteDescription(answer); - - hasProps(pc1.getTransceivers(), - [ - { - stopped: true, - mid: null - } - ]); - - hasProps(pc2.getTransceivers(), - [ - { - stopped: true, - mid: null - } - ]); + assert_equals(pc1.getTransceivers().length, 0); + assert_equals(pc2.getTransceivers().length, 0); }; const checkStopAfterSetLocalOffer = async t => { @@ -1413,6 +1390,7 @@ pc1.getTransceivers()[0].stop(); let answer = await pc2.createAnswer(); + const negotiationNeededAwaiter = negotiationNeeded(pc1); const trackEvents = await setRemoteDescriptionReturnTrackEvents(pc1, answer); // Spec language doesn't say anything about checking whether the transceiver // is stopped here. @@ -1427,10 +1405,11 @@ hasPropsAndUniqueMids(pc1.getTransceivers(), [ { - stopped: true, + direction: "stopped", + currentDirection: "sendrecv" } ]); - await negotiationNeeded(pc1); + await negotiationNeededAwaiter; trickle(t, pc2, pc1); await pc2.setLocalDescription(answer); @@ -1445,21 +1424,8 @@ await pc2.setLocalDescription(answer); await pc1.setRemoteDescription(answer); - hasProps(pc1.getTransceivers(), - [ - { - stopped: true, - mid: null - } - ]); - - hasProps(pc2.getTransceivers(), - [ - { - stopped: true, - mid: null - } - ]); + assert_equals(pc1.getTransceivers().length, 0); + assert_equals(pc2.getTransceivers().length, 0); }; const checkStopAfterSetRemoteOffer = async t => { @@ -1479,22 +1445,35 @@ await pc2.setRemoteDescription(offer) await pc1.setLocalDescription(offer); - // Stop on _answerer_side now. Should take effect in answer. + // Stop on _answerer_ side now. Should not stop transceiver in answer, + // but cause firing of negotiationNeeded at pc2, and disabling + // of the transceiver with direction = inactive in answer. pc2.getTransceivers()[0].stop(); + assert_equals(pc2.getTransceivers()[0].direction, 'stopped'); const answer = await pc2.createAnswer(); const trackEvents = await setRemoteDescriptionReturnTrackEvents(pc1, answer); hasProps(trackEvents, []); - hasProps(pc1.getTransceivers(), + hasProps(pc2.getTransceivers(), [ { - stopped: true, - mid: null + direction: "stopped", + currentDirection: null, } ]); + const negotiationNeededAwaiter = negotiationNeeded(pc2); await pc2.setLocalDescription(answer); + hasProps(pc2.getTransceivers(), + [ + { + direction: "stopped", + currentDirection: "inactive", + } + ]); + + await negotiationNeededAwaiter; }; const checkStopAfterCreateAnswer = async t => { @@ -1532,16 +1511,25 @@ hasPropsAndUniqueMids(pc2.getTransceivers(), [ { - stopped: true, + direction: "stopped", + currentDirection: null, } ]); trickle(t, pc2, pc1); - // The negotiaionneeded event is fired during processing of + // The negotiationneeded event is fired during processing of // setLocalDescription() - const negotiationNeededWaiter = negotiationNeeded(pc2); + const negotiationNeededAwaiter = negotiationNeeded(pc2); await pc2.setLocalDescription(answer); - await negotiationNeededWaiter; + hasPropsAndUniqueMids(pc2.getTransceivers(), + [ + { + direction: "stopped", + currentDirection: "sendrecv", + } + ]); + + await negotiationNeededAwaiter; await iceConnected(pc1); await iceConnected(pc2); @@ -1552,19 +1540,22 @@ await pc2.setLocalDescription(answer); await pc1.setRemoteDescription(answer); + // Since this offer/answer exchange was initiated from pc1, + // pc2 still doesn't get to say that it has a stopped transceiver, + // but does get to set it to inactive. hasProps(pc1.getTransceivers(), [ { - stopped: true, - mid: null + direction: "sendrecv", + currentDirection: "inactive", } ]); hasProps(pc2.getTransceivers(), [ { - stopped: true, - mid: null + direction: "stopped", + currentDirection: "inactive", } ]); }; @@ -1607,7 +1598,8 @@ hasPropsAndUniqueMids(pc2.getTransceivers(), [ { - stopped: true, + direction: "stopped", + currentDirection: "sendrecv", } ]); @@ -1615,28 +1607,17 @@ await iceConnected(pc1); await iceConnected(pc2); - offer = await pc1.createOffer(); - await pc1.setLocalDescription(offer); - await pc2.setRemoteDescription(offer); - answer = await pc2.createAnswer(); - await pc2.setLocalDescription(answer); - await pc1.setRemoteDescription(answer); - - hasProps(pc1.getTransceivers(), - [ - { - stopped: true, - mid: null - } - ]); + // Initiate an offer/answer exchange from pc2 in order + // to negotiate the stopped transceiver. + offer = await pc2.createOffer(); + await pc2.setLocalDescription(offer); + await pc1.setRemoteDescription(offer); + answer = await pc1.createAnswer(); + await pc1.setLocalDescription(answer); + await pc2.setRemoteDescription(answer); - hasProps(pc2.getTransceivers(), - [ - { - stopped: true, - mid: null - } - ]); + assert_equals(pc1.getTransceivers().length, 0); + assert_equals(pc2.getTransceivers().length, 0); }; const checkStopAfterClose = async t => { @@ -1683,7 +1664,6 @@ sender: {track}, direction: "sendrecv", currentDirection: null, - stopped: false } ]); @@ -1703,7 +1683,6 @@ direction: "sendonly", mid: null, currentDirection: null, - stopped: false } ]); @@ -1713,7 +1692,11 @@ pc.getTransceivers()[0].stop(); await pc.setLocalDescription({type: "rollback"}); - hasProps(pc.getTransceivers(), [{ stopped: true }]); + hasProps(pc.getTransceivers(), [ + { + direction: "stopped", + } + ]); }; const checkRollbackAndSetRemoteOfferWithDifferentType = async t => { @@ -1744,7 +1727,6 @@ direction: "sendrecv", mid: null, currentDirection: null, - stopped: false } ]); @@ -1756,7 +1738,6 @@ direction: "sendrecv", mid: null, currentDirection: null, - stopped: false } ]); @@ -1770,14 +1751,12 @@ direction: "sendrecv", mid: null, currentDirection: null, - stopped: false }, { receiver: {track: {kind: "video"}}, sender: {track: null}, direction: "recvonly", currentDirection: "recvonly", - stopped: false } ]); @@ -1788,7 +1767,6 @@ sender: {track: videoTrack}, direction: "sendrecv", currentDirection: "sendonly", - stopped: false } ]); @@ -1823,7 +1801,6 @@ hasProps(removedTransceiver, { - stopped: true, mid: null, currentDirection: null } @@ -1834,7 +1811,6 @@ hasProps(removedTransceiver, { receiver: {track: {readyState: "ended"}}, - stopped: true, mid: null, currentDirection: null } @@ -1849,7 +1825,6 @@ sender: {track: null}, direction: "recvonly", currentDirection: null, - stopped: false } ]); @@ -1869,7 +1844,6 @@ direction: "sendrecv", mid: mid0, currentDirection: null, - stopped: false } ]); @@ -1889,7 +1863,6 @@ direction: "recvonly", mid: mid0, currentDirection: null, - stopped: false } ]); @@ -1903,7 +1876,6 @@ direction: "sendrecv", mid: mid0, currentDirection: null, - stopped: false } ]); @@ -1917,7 +1889,6 @@ direction: "sendrecv", mid: null, currentDirection: null, - stopped: false } ]); @@ -1954,7 +1925,6 @@ direction: "sendrecv", mid: mid0, currentDirection: "sendrecv", - stopped: false } ]); @@ -1990,21 +1960,20 @@ direction: "sendrecv", mid: null, currentDirection: null, - stopped: true } ]); // stop() cannot be rolled back! + // Transceiver should have [[stopping]]=true, [[stopped]]=false await pc2.setRemoteDescription({type: "rollback"}); hasProps(pc2.getTransceivers(), [ { receiver: {track: {kind: "audio"}}, sender: {track: {kind: "audio"}}, - direction: "sendrecv", + direction: "stopped", mid: null, - currentDirection: null, - stopped: true + currentDirection: "sendrecv", } ]); }; @@ -2062,7 +2031,6 @@ { mid: null, currentDirection: null, - stopped: true } ]); @@ -2071,7 +2039,6 @@ { mid: null, currentDirection: null, - stopped: true } ]); @@ -2087,7 +2054,6 @@ hasProps(pc1.getTransceivers(), [ { - stopped: true }, { sender: {track: track2} @@ -2103,7 +2069,6 @@ hasProps(pc2.getTransceivers(), [ { - stopped: true }, { sender: {track} @@ -2181,7 +2146,6 @@ }, { mid: null, - stopped: true }, { sender: {track: null}, @@ -2206,7 +2170,6 @@ [ {}, { - stopped: true }, { mid: mid1, diff --git a/tests/wpt/web-platform-tests/webstorage/set.window.js b/tests/wpt/web-platform-tests/webstorage/set.window.js index 1c20907939a..8e671d2dedd 100644 --- a/tests/wpt/web-platform-tests/webstorage/set.window.js +++ b/tests/wpt/web-platform-tests/webstorage/set.window.js @@ -43,7 +43,7 @@ assert_equals(storage[key], proto); assert_equals(storage.getItem(key), null); assert_equals(storage[key] = value, value); - // Hidden because no [LegacyOverrideBuiltins]. + // Hidden because no [LegacyOverrideBuiltIns]. assert_equals(storage[key], proto); assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined); assert_equals(storage.getItem(key), value); @@ -62,7 +62,7 @@ storage.setItem(key, existing); - // Hidden because no [LegacyOverrideBuiltins]. + // Hidden because no [LegacyOverrideBuiltIns]. assert_equals(storage[key], proto); assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined); assert_equals(storage.getItem(key), existing); @@ -93,7 +93,7 @@ assert_equals(storage[key], proto); assert_equals(storage.getItem(key), null); assert_equals(storage[key] = value, value); - // Property is hidden because no [LegacyOverrideBuiltins]. + // Property is hidden because no [LegacyOverrideBuiltIns]. assert_equals(storage[key], proto); assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined); assert_equals(storage.getItem(key), value); |