mirror of
https://github.com/servo/servo.git
synced 2025-08-02 12:10:29 +01:00
Auto merge of #24868 - servo-wpt-sync:wpt_update_26-11-2019, r=servo-wpt-sync
Sync WPT with upstream (26-11-2019) Automated downstream sync of changes from upstream as of 26-11-2019. [no-wpt-sync] r? @servo-wpt-sync
This commit is contained in:
commit
b62d1d4f7a
90 changed files with 1854 additions and 260 deletions
|
@ -7,7 +7,7 @@
|
|||
expected: FAIL
|
||||
|
||||
[Opening a blob URL in a new window immediately before revoking it works.]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
|
||||
expected: FAIL
|
||||
|
|
|
@ -2,14 +2,8 @@
|
|||
[Revoke blob URL after creating Request, will fetch]
|
||||
expected: FAIL
|
||||
|
||||
[Revoke blob URL after calling fetch, fetch should succeed]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[url-with-fetch.any.html]
|
||||
[Revoke blob URL after creating Request, will fetch]
|
||||
expected: FAIL
|
||||
|
||||
[Revoke blob URL after calling fetch, fetch should succeed]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -205305,18 +205305,6 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"mathml/presentation-markup/direction/direction-009.html": [
|
||||
[
|
||||
"mathml/presentation-markup/direction/direction-009.html",
|
||||
[
|
||||
[
|
||||
"/mathml/presentation-markup/direction/direction-009-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"mathml/presentation-markup/direction/direction-010.html": [
|
||||
[
|
||||
"mathml/presentation-markup/direction/direction-010.html",
|
||||
|
@ -205821,6 +205809,18 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"mathml/presentation-markup/tokens/ms-001.html": [
|
||||
[
|
||||
"mathml/presentation-markup/tokens/ms-001.html",
|
||||
[
|
||||
[
|
||||
"/mathml/presentation-markup/tokens/ms-001-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"mathml/relations/css-styling/color-001.html": [
|
||||
[
|
||||
"mathml/relations/css-styling/color-001.html",
|
||||
|
@ -276990,9 +276990,6 @@
|
|||
"mathml/presentation-markup/direction/direction-008-ref.html": [
|
||||
[]
|
||||
],
|
||||
"mathml/presentation-markup/direction/direction-009-ref.html": [
|
||||
[]
|
||||
],
|
||||
"mathml/presentation-markup/direction/direction-010-ref.html": [
|
||||
[]
|
||||
],
|
||||
|
@ -277125,6 +277122,9 @@
|
|||
"mathml/presentation-markup/spaces/space-2-ref.html": [
|
||||
[]
|
||||
],
|
||||
"mathml/presentation-markup/tokens/ms-001-ref.html": [
|
||||
[]
|
||||
],
|
||||
"mathml/relations/css-styling/color-001-ref.html": [
|
||||
[]
|
||||
],
|
||||
|
@ -278814,9 +278814,15 @@
|
|||
"portals/references/portals-rendering.html": [
|
||||
[]
|
||||
],
|
||||
"portals/resources/blank-host.html": [
|
||||
[]
|
||||
],
|
||||
"portals/resources/eval-portal.html": [
|
||||
[]
|
||||
],
|
||||
"portals/resources/open-blank-host.js": [
|
||||
[]
|
||||
],
|
||||
"portals/resources/portal-activate-data-portal.html": [
|
||||
[]
|
||||
],
|
||||
|
@ -316547,7 +316553,9 @@
|
|||
"cookies/http-state/path-tests.html": [
|
||||
[
|
||||
"cookies/http-state/path-tests.html",
|
||||
{}
|
||||
{
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"cookies/http-state/value-tests.html": [
|
||||
|
@ -324243,6 +324251,12 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-masking/animations/mask-position-interpolation.html": [
|
||||
[
|
||||
"css/css-masking/animations/mask-position-interpolation.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-masking/clip-path/interpolation.html": [
|
||||
[
|
||||
"css/css-masking/clip-path/interpolation.html",
|
||||
|
@ -334205,6 +334219,18 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/cssom-view/MediaQueryList-extends-EventTarget-interop.html": [
|
||||
[
|
||||
"css/cssom-view/MediaQueryList-extends-EventTarget-interop.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/cssom-view/MediaQueryList-extends-EventTarget.html": [
|
||||
[
|
||||
"css/cssom-view/MediaQueryList-extends-EventTarget.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/cssom-view/MediaQueryListEvent.html": [
|
||||
[
|
||||
"css/cssom-view/MediaQueryListEvent.html",
|
||||
|
@ -335348,7 +335374,9 @@
|
|||
"css/cssom/idlharness.html": [
|
||||
[
|
||||
"css/cssom/idlharness.html",
|
||||
{}
|
||||
{
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"css/cssom/inline-style-001.html": [
|
||||
|
@ -337392,6 +337420,12 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"dom/events/Event-dispatch-order-at-target.html": [
|
||||
[
|
||||
"dom/events/Event-dispatch-order-at-target.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"dom/events/Event-dispatch-order.html": [
|
||||
[
|
||||
"dom/events/Event-dispatch-order.html",
|
||||
|
@ -362151,15 +362185,15 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html": [
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html": [
|
||||
[
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html",
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads_without_user_activation.sub.tentative.html": [
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.sub.tentative.html": [
|
||||
[
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads_without_user_activation.sub.tentative.html",
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.sub.tentative.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
|
@ -362229,17 +362263,17 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html": [
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html": [
|
||||
[
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html",
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html",
|
||||
{
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads_without_user_activation.sub.tentative.html": [
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html": [
|
||||
[
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads_without_user_activation.sub.tentative.html",
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
|
@ -364265,6 +364299,12 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html": [
|
||||
[
|
||||
"html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"html/semantics/interactive-elements/the-summary-element/display-table-with-rt-crash.html": [
|
||||
[
|
||||
"html/semantics/interactive-elements/the-summary-element/display-table-with-rt-crash.html",
|
||||
|
@ -369138,6 +369178,12 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"html/webappapis/scripting/events/event-handler-handleEvent-ignored.html": [
|
||||
[
|
||||
"html/webappapis/scripting/events/event-handler-handleEvent-ignored.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"html/webappapis/scripting/events/event-handler-javascript.html": [
|
||||
[
|
||||
"html/webappapis/scripting/events/event-handler-javascript.html",
|
||||
|
@ -371544,6 +371590,24 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"layout-instability/clip-negative-bottom-margin.html": [
|
||||
[
|
||||
"layout-instability/clip-negative-bottom-margin.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-instability/composited-element-movement.html": [
|
||||
[
|
||||
"layout-instability/composited-element-movement.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-instability/fully-clipped-visual-rect.html": [
|
||||
[
|
||||
"layout-instability/fully-clipped-visual-rect.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-instability/idlharness.window.js": [
|
||||
[
|
||||
"layout-instability/idlharness.window.html",
|
||||
|
@ -371561,6 +371625,24 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"layout-instability/ignore-fixed-and-sticky.html": [
|
||||
[
|
||||
"layout-instability/ignore-fixed-and-sticky.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-instability/local-shift-without-viewport-shift.html": [
|
||||
[
|
||||
"layout-instability/local-shift-without-viewport-shift.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-instability/multi-clip-visual-rect.html": [
|
||||
[
|
||||
"layout-instability/multi-clip-visual-rect.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-instability/observe-layout-shift.html": [
|
||||
[
|
||||
"layout-instability/observe-layout-shift.html",
|
||||
|
@ -371569,12 +371651,42 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"layout-instability/partially-clipped-visual-rect.html": [
|
||||
[
|
||||
"layout-instability/partially-clipped-visual-rect.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-instability/rtl-distance.html": [
|
||||
[
|
||||
"layout-instability/rtl-distance.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-instability/shift-into-viewport.html": [
|
||||
[
|
||||
"layout-instability/shift-into-viewport.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-instability/shift-outside-viewport.html": [
|
||||
[
|
||||
"layout-instability/shift-outside-viewport.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-instability/shift-while-scrolled.html": [
|
||||
[
|
||||
"layout-instability/shift-while-scrolled.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-instability/shift-with-counterscroll.html": [
|
||||
[
|
||||
"layout-instability/shift-with-counterscroll.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"layout-instability/simple-block-movement.html": [
|
||||
[
|
||||
"layout-instability/simple-block-movement.html",
|
||||
|
@ -389090,6 +389202,12 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"portals/about-blank-cannot-host.html": [
|
||||
[
|
||||
"portals/about-blank-cannot-host.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"portals/csp/frame-src.sub.html": [
|
||||
[
|
||||
"portals/csp/frame-src.sub.html",
|
||||
|
@ -459929,7 +460047,7 @@
|
|||
"support"
|
||||
],
|
||||
".github/workflows/epochs.yml": [
|
||||
"78aaf16d18a43c4baaf4512d067acc3b16c75e27",
|
||||
"a93a1e8defb4fdeeb9f7740db1cc5c520aa07e5e",
|
||||
"support"
|
||||
],
|
||||
".github/workflows/manifest.yml": [
|
||||
|
@ -492345,7 +492463,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"cookies/http-state/path-tests.html": [
|
||||
"b30d8362252c59b318b00669c0c542c78b429594",
|
||||
"0a4794a4c0e5b108e46e90d2f05049fcd206a6eb",
|
||||
"testharness"
|
||||
],
|
||||
"cookies/http-state/resources/all-tests.html.py-str": [
|
||||
|
@ -579205,7 +579323,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"css/css-grid/parsing/grid-shorthand-valid.html": [
|
||||
"435959af25e0f03b8f53844f907430daa3d36d97",
|
||||
"80ee50a6e273f1f4ae1a86e6a95fcc5a984d4f10",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-grid/parsing/grid-shorthand.html": [
|
||||
|
@ -579269,7 +579387,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"css/css-grid/parsing/grid-template-shorthand-valid.html": [
|
||||
"042268f334816172b077edf341b1c091196f5197",
|
||||
"8790627f4a6d13444d9232af6bca5af172149c54",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-grid/parsing/grid-template-shorthand.html": [
|
||||
|
@ -581620,6 +581738,10 @@
|
|||
"e00170ed331bcbca450a4de5ef41c415cc88d2b9",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-masking/animations/mask-position-interpolation.html": [
|
||||
"d832048ca37b2693218d1c2891d9cb3fa8ba8609",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-masking/clip-path-svg-content/clip-path-clip-nested-twice.svg": [
|
||||
"269e8feed2d3c21774a7c94729c3551899ce4d92",
|
||||
"reftest"
|
||||
|
@ -619173,11 +619295,19 @@
|
|||
"testharness"
|
||||
],
|
||||
"css/cssom-view/MediaQueryList-addListener-removeListener.html": [
|
||||
"5446e48e6cfcf20d5005ecfa4f75523f61ab83e2",
|
||||
"1144e3a78322ceb7b49056c0530835bb2301fc30",
|
||||
"testharness"
|
||||
],
|
||||
"css/cssom-view/MediaQueryList-extends-EventTarget-interop.html": [
|
||||
"7dae2afbd723883ef2230ac47f68987ff6f03d08",
|
||||
"testharness"
|
||||
],
|
||||
"css/cssom-view/MediaQueryList-extends-EventTarget.html": [
|
||||
"34b6ef15c052ef8140973bd4d1e52b8c91b10832",
|
||||
"testharness"
|
||||
],
|
||||
"css/cssom-view/MediaQueryListEvent.html": [
|
||||
"24cce3cc0973cf7478c92ce05137926ea0b78f77",
|
||||
"0afa09f087a2de0d2d8fcf6c095688cb750f8d80",
|
||||
"testharness"
|
||||
],
|
||||
"css/cssom-view/Screen-pixelDepth-Screen-colorDepth001.html": [
|
||||
|
@ -619397,7 +619527,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"css/cssom-view/matchMedia.html": [
|
||||
"14df3d02425ddf32caa904cfcfe3d8e2fae0c803",
|
||||
"0a94c9850c8fcc72eb01d0df929e914b71cf8a2c",
|
||||
"testharness"
|
||||
],
|
||||
"css/cssom-view/mouseEvent.html": [
|
||||
|
@ -619477,7 +619607,7 @@
|
|||
"support"
|
||||
],
|
||||
"css/cssom-view/resources/matchMedia.js": [
|
||||
"8013699b7dee114da3313ccfba61d57e7e860e5b",
|
||||
"8623a6597a0d88c683eaaf2cd7d7515bb0f2cd7c",
|
||||
"support"
|
||||
],
|
||||
"css/cssom-view/screenLeftTop.html": [
|
||||
|
@ -620185,7 +620315,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"css/cssom/idlharness.html": [
|
||||
"3204fb8c7e750d5b121c34ba068e070e7cbddc5a",
|
||||
"ce13d30cfad18ca0d48298694ec2477a7d6d68b5",
|
||||
"testharness"
|
||||
],
|
||||
"css/cssom/inline-style-001.html": [
|
||||
|
@ -634784,6 +634914,10 @@
|
|||
"361006a7240496e9be747faca5056fe2a62a2cff",
|
||||
"testharness"
|
||||
],
|
||||
"dom/events/Event-dispatch-order-at-target.html": [
|
||||
"79673c32564cbe785858266d4737de6bd5f7bade",
|
||||
"testharness"
|
||||
],
|
||||
"dom/events/Event-dispatch-order.html": [
|
||||
"ca94434595c6ee19fb0f6982f56da0d005b4586c",
|
||||
"testharness"
|
||||
|
@ -640061,7 +640195,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"feature-policy/feature-policy-for-sandbox/resources/helper.js": [
|
||||
"9de8416535613fc1d46396953750cc9ab6a7990b",
|
||||
"eec189871ff82d18c6e8a3cc86ccf9c08597ca42",
|
||||
"support"
|
||||
],
|
||||
"feature-policy/feature-policy-for-sandbox/resources/opened_window.html": [
|
||||
|
@ -641977,7 +642111,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"fetch/metadata/portal.tentative.https.sub.html": [
|
||||
"b9128944733b0301606a57087cb40c143d3cb99a",
|
||||
"4e50b6b24b356dac6c6c7f5b7d17b7f4f01431c1",
|
||||
"testharness"
|
||||
],
|
||||
"fetch/metadata/prefetch.tentative.https.sub.html": [
|
||||
|
@ -656752,11 +656886,11 @@
|
|||
"042851bbb492365e9d176aff8d678feb645f1d18",
|
||||
"testharness"
|
||||
],
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html": [
|
||||
"32409f220f0a273f165741e2d79ca60846d61648",
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html": [
|
||||
"1e93cb5997df5c85a6b67d3b486ae441adfb33fd",
|
||||
"testharness"
|
||||
],
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads_without_user_activation.sub.tentative.html": [
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_anchor_download_block_downloads.sub.tentative.html": [
|
||||
"abd4d7c5e0d76d04cd678b00a153d5a8f10bddf7",
|
||||
"testharness"
|
||||
],
|
||||
|
@ -656804,11 +656938,11 @@
|
|||
"12c4e0ca50236caacae89c76da3b81effd7b44be",
|
||||
"testharness"
|
||||
],
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html": [
|
||||
"6af49b8d78ddf2acbad9e8fb875e8250c825cd33",
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html": [
|
||||
"50e28f650c74ca734f63f970e61dfea77e7ab0bd",
|
||||
"testharness"
|
||||
],
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads_without_user_activation.sub.tentative.html": [
|
||||
"html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_block_downloads.sub.tentative.html": [
|
||||
"9b9246c393ec9b4ee3b9762d6d06ea65ff0ff5d1",
|
||||
"testharness"
|
||||
],
|
||||
|
@ -657789,7 +657923,7 @@
|
|||
"support"
|
||||
],
|
||||
"html/semantics/forms/form-submission-0/resources/form-submission.py": [
|
||||
"467875453c9dc64aac51add3f4a617d941820972",
|
||||
"b296ac44c57c658ca9e3189e9f79b0f80677acba",
|
||||
"support"
|
||||
],
|
||||
"html/semantics/forms/form-submission-0/resources/targetted-form.js": [
|
||||
|
@ -657801,7 +657935,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"html/semantics/forms/form-submission-0/submit-entity-body.html": [
|
||||
"f6f3858d4ff025cfbb2ba6b0745df51c6d39436b",
|
||||
"be9c5f0696eda41b652c9653fee1a70a2304e8f5",
|
||||
"testharness"
|
||||
],
|
||||
"html/semantics/forms/form-submission-0/submit-file.sub.html": [
|
||||
|
@ -659136,6 +659270,10 @@
|
|||
"4a3693bd2dafe710b82054bfadd8bcaa97b16db5",
|
||||
"testharness"
|
||||
],
|
||||
"html/semantics/interactive-elements/the-summary-element/anchor-with-inline-element.html": [
|
||||
"ab200020b4f05321d4ee7c17c4a8f11c6f5931db",
|
||||
"testharness"
|
||||
],
|
||||
"html/semantics/interactive-elements/the-summary-element/display-table-with-rt-crash.html": [
|
||||
"57cc45478e03ce1cdbb755281b2f434b38582563",
|
||||
"testharness"
|
||||
|
@ -663312,12 +663450,16 @@
|
|||
"9b81d42ff729399d57e182abc8b8950cef503e12",
|
||||
"testharness"
|
||||
],
|
||||
"html/webappapis/scripting/events/event-handler-handleEvent-ignored.html": [
|
||||
"8039bac7adc137154d92173b29e7283baf6db22c",
|
||||
"testharness"
|
||||
],
|
||||
"html/webappapis/scripting/events/event-handler-javascript.html": [
|
||||
"657a37839d2f3ed78968d1f0739f8594aa391cda",
|
||||
"testharness"
|
||||
],
|
||||
"html/webappapis/scripting/events/event-handler-onresize.html": [
|
||||
"8686716e19ac86748a1e9988767f073e2cd3348b",
|
||||
"0e44e7272f02513c6de0c5aecc96f09005ad7396",
|
||||
"testharness"
|
||||
],
|
||||
"html/webappapis/scripting/events/event-handler-processing-algorithm-error/document-synthetic-errorevent.html": [
|
||||
|
@ -665117,7 +665259,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/WebCryptoAPI.idl": [
|
||||
"0b515fc12e701b4b20c616e2ae4ce29f50a205b6",
|
||||
"fecb3b72d3afea791a0f0648bcefa6dc014fe330",
|
||||
"support"
|
||||
],
|
||||
"interfaces/WebIDL.idl": [
|
||||
|
@ -665589,7 +665731,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/web-nfc.idl": [
|
||||
"340dab647d6c5156ada9af62b77f419063aeefa7",
|
||||
"455720c641e69af2e68b9c9a0eb2cbd740267e26",
|
||||
"support"
|
||||
],
|
||||
"interfaces/web-share.idl": [
|
||||
|
@ -666272,14 +666414,42 @@
|
|||
"dabc8068931ff3b15eb4b80481ed2102a7725a62",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/clip-negative-bottom-margin.html": [
|
||||
"2c329d9fcd66d86bf8c350c2ee419e28ef6596f4",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/composited-element-movement.html": [
|
||||
"c9906903358d8c2b94877f536e733320d0ada75b",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/fully-clipped-visual-rect.html": [
|
||||
"bfd74a2407e2d91cdb2a13b86945b040aeb6dcca",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/idlharness.window.js": [
|
||||
"7d97446a57808576722a823f604effa94bb95e76",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/ignore-fixed-and-sticky.html": [
|
||||
"1b39dc9e6e9320a7932986d3a0063b7a4e556129",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/local-shift-without-viewport-shift.html": [
|
||||
"37729f1c13c298b5a2d95c46b7a4f199d8943022",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/multi-clip-visual-rect.html": [
|
||||
"36475d4c826c11807e9c0a7fbf4457c33c92c2c0",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/observe-layout-shift.html": [
|
||||
"1c35fe2aa234c96fce8798e6a1c35362f418e6f1",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/partially-clipped-visual-rect.html": [
|
||||
"3b18b98dd93312c37b9e2f25918df50266a09243",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/resources/slow-image.py": [
|
||||
"ee7988c551f6429eea2b929af083ad30cbd5c73d",
|
||||
"support"
|
||||
|
@ -666292,6 +666462,22 @@
|
|||
"a6f0040e950649015119ecacc465e75303b5ff9b",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/shift-into-viewport.html": [
|
||||
"6ace93ad54c2f6b173df060e39be097eca4b6867",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/shift-outside-viewport.html": [
|
||||
"49242913760a76d124eac0eeb3de8bb4e8eb8a19",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/shift-while-scrolled.html": [
|
||||
"88eeedea87782939d0191c64f7771e7e4f8828c3",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/shift-with-counterscroll.html": [
|
||||
"8ad1a463443ef1b6b8b8ca06a9435157cb38a1f5",
|
||||
"testharness"
|
||||
],
|
||||
"layout-instability/simple-block-movement.html": [
|
||||
"0f9257e27ce5d553d8176f084e537e47b331416e",
|
||||
"testharness"
|
||||
|
@ -666612,14 +666798,6 @@
|
|||
"d94a036be00f404bd4d51350a85f70c180e9c776",
|
||||
"reftest"
|
||||
],
|
||||
"mathml/presentation-markup/direction/direction-009-ref.html": [
|
||||
"8b80b7e6bead29d97540896d5ac1ae14b46881f1",
|
||||
"support"
|
||||
],
|
||||
"mathml/presentation-markup/direction/direction-009.html": [
|
||||
"c0ca31d40a82e5af2e23a4c5dee83f9e2bb593cb",
|
||||
"reftest"
|
||||
],
|
||||
"mathml/presentation-markup/direction/direction-010-ref.html": [
|
||||
"4f595ed49f698a7a70392edb5e72dd1df8471368",
|
||||
"support"
|
||||
|
@ -667128,6 +667306,14 @@
|
|||
"f9354266a7c6c42a75519e9771eb2c61536ad8e5",
|
||||
"testharness"
|
||||
],
|
||||
"mathml/presentation-markup/tokens/ms-001-ref.html": [
|
||||
"bbd42a93eedbbabb7aff8fa1aa60f5c954e48210",
|
||||
"support"
|
||||
],
|
||||
"mathml/presentation-markup/tokens/ms-001.html": [
|
||||
"b0b03f225525ffacf1d8f73da03a3848b39e96f8",
|
||||
"reftest"
|
||||
],
|
||||
"mathml/relations/css-styling/attribute-mapping-001.html": [
|
||||
"3424e8c1a8cbb775a91839db6b3951dfe869af95",
|
||||
"testharness"
|
||||
|
@ -680224,6 +680410,10 @@
|
|||
"29134d490f7bdfb09255e190fe91576629057c78",
|
||||
"support"
|
||||
],
|
||||
"portals/about-blank-cannot-host.html": [
|
||||
"207d477697d823d6611b4d8dc6681b3e2fc90a73",
|
||||
"testharness"
|
||||
],
|
||||
"portals/csp/frame-src.sub.html": [
|
||||
"34f1474d4b37f6a867b858a0bfc88e03db48153a",
|
||||
"testharness"
|
||||
|
@ -680269,7 +680459,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"portals/portal-activate-data.html": [
|
||||
"38204edb2c3c2ac17aec54cedd3b6f9f6d42c698",
|
||||
"b3b9223b5199df329e770f224161632c6ee5604a",
|
||||
"testharness"
|
||||
],
|
||||
"portals/portal-activate-event-constructor.html": [
|
||||
|
@ -680301,7 +680491,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"portals/portals-activate-resolution.html": [
|
||||
"44ccea3bc521e14f7c826f14c3e815494df65ae7",
|
||||
"db77a990e532a3d1b88f57300094cbd60215d69d",
|
||||
"testharness"
|
||||
],
|
||||
"portals/portals-activate-twice.html": [
|
||||
|
@ -680337,7 +680527,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"portals/portals-navigate-after-adoption.html": [
|
||||
"083eeaa14821b5916fc452a8a09bfa6ed308c191",
|
||||
"5ad30d7928a6c4eda0cbcb5afad9c29234b9a057",
|
||||
"testharness"
|
||||
],
|
||||
"portals/portals-nested.html": [
|
||||
|
@ -680377,17 +680567,25 @@
|
|||
"testharness"
|
||||
],
|
||||
"portals/portals-set-src-after-activate.html": [
|
||||
"8da6b341840162dc7348b95cfed060c075a75135",
|
||||
"70a16436a67f254372be5f861d83d9e9b66f895f",
|
||||
"testharness"
|
||||
],
|
||||
"portals/references/portals-rendering.html": [
|
||||
"4a8414ab5656593811772c3728e4ee83eb034457",
|
||||
"support"
|
||||
],
|
||||
"portals/resources/blank-host.html": [
|
||||
"d9f3a61eb8488ba78df7439ff612fa600ff53008",
|
||||
"support"
|
||||
],
|
||||
"portals/resources/eval-portal.html": [
|
||||
"98c2013915eae38bea2b8722bb8f80378ae894a0",
|
||||
"support"
|
||||
],
|
||||
"portals/resources/open-blank-host.js": [
|
||||
"f7580bd15212234c36b55a368efa0c729bd64e5b",
|
||||
"support"
|
||||
],
|
||||
"portals/resources/portal-activate-data-portal.html": [
|
||||
"f57e4b196be471783316a6749a58ebd4a5b962a7",
|
||||
"support"
|
||||
|
@ -694233,7 +694431,7 @@
|
|||
"support"
|
||||
],
|
||||
"resources/chromium/sms_mock.js": [
|
||||
"bdfbc2052fa102a0e502937a610a9c64d79d1bbe",
|
||||
"d8476cf37ad0edde630634e6821fdc68b7e69114",
|
||||
"support"
|
||||
],
|
||||
"resources/chromium/string16.mojom.js": [
|
||||
|
@ -699553,7 +699751,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"sms/interceptor.https.html": [
|
||||
"6da2d71c52a90f7d0906ea99397976cb6e1573e3",
|
||||
"94f1951a1380290a7c30fdbf85cd512d9064b8e3",
|
||||
"testharness"
|
||||
],
|
||||
"sms/resources/helper.js": [
|
||||
|
@ -699569,7 +699767,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"sms/sms_receiver.idl": [
|
||||
"64048523f901f8509e85e4dc1ddc1f7c59ab3489",
|
||||
"ca8cfdd798c8e7d85c8251ea08acb063fc25ae77",
|
||||
"support"
|
||||
],
|
||||
"speech-api/META.yml": [
|
||||
|
@ -710417,7 +710615,7 @@
|
|||
"support"
|
||||
],
|
||||
"tools/wptrunner/wptrunner/browsers/servodriver.py": [
|
||||
"ea345efa44fd4ec57cde5abc90c92d998c4a6c73",
|
||||
"2953de18174ef75d505db0b8d518fe3339f7065e",
|
||||
"support"
|
||||
],
|
||||
"tools/wptrunner/wptrunner/browsers/webkit.py": [
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[perspective-interpolation.html]
|
||||
expected: CRASH
|
||||
expected: ERROR
|
||||
[ perspective interpolation]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[MediaQueryList-extends-EventTarget-interop.html]
|
||||
[listeners are called in order they were added, ignoring capture parameter]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[Event-dispatch-order-at-target.html]
|
||||
[Listeners are invoked in correct order (AT_TARGET phase)]
|
||||
expected: FAIL
|
||||
|
|
@ -309,15 +309,9 @@
|
|||
[<iframe>: separate response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -327,3 +321,18 @@
|
|||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,6 +56,6 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript; charset=windows-1252 text/javascript]
|
||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_3.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_4.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[creating_browsing_context_test_01.html]
|
||||
[first argument: absolute url]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,24 @@
|
|||
[open-features-negative-innerwidth-innerheight.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
|
||||
expected: FAIL
|
||||
|
||||
[features "innerheight=-404.5" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=-404.5" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=-404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=-404e1" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=-404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=-404e1" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,24 @@
|
|||
[open-features-negative-screenx-screeny.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
|
||||
expected: FAIL
|
||||
|
||||
[features "screenx=-204" should NOT set "left=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=-204" should NOT set "top=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=-204.5" should NOT set "top=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=-0" should NOT set "top=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=-0" should NOT set "left=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=-204.5" should NOT set "left=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,24 @@
|
|||
[open-features-negative-top-left.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: negative values for `top`, `left`]
|
||||
expected: FAIL
|
||||
|
||||
[features "top=-204" should NOT set "top=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=-204.5" should NOT set "top=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=-204" should NOT set "left=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=-0" should NOT set "top=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=-204.5" should NOT set "left=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=-0" should NOT set "left=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,24 @@
|
|||
[open-features-negative-width-height.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: negative values for `width`, `height`]
|
||||
expected: FAIL
|
||||
|
||||
[features "height=-404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=-404e1" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=-404.5" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=-404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=-404e1" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=-404.5" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,48 @@
|
|||
[open-features-non-integer-height.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for feature `height`]
|
||||
expected: FAIL
|
||||
|
||||
[features "height=405*3" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405.32" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405e1" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405/5" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405^4" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405.5" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405e-1" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405 " should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405LLl" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=/404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[top=0,left=0,width=401,: absence of feature "height" should be treated same as "height=0"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[top=0,left=0: absence of feature "height" should be treated same as "height=0"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=_404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=L404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,42 @@
|
|||
[open-features-non-integer-innerheight.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
|
||||
expected: FAIL
|
||||
|
||||
[features "innerheight=405e-1" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405LLl" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405^4" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405e1" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405 " should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405/5" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405.32" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405.5" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405*3" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=_404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=L404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=/404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,42 @@
|
|||
[open-features-non-integer-innerwidth.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
|
||||
expected: FAIL
|
||||
|
||||
[features "innerwidth=405e-1" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405*3" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405.5" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405e1" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405.32" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405 " should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405LLl" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405/5" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405^4" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=/404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=_404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=L404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,42 @@
|
|||
[open-features-non-integer-left.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for feature `left`]
|
||||
expected: FAIL
|
||||
|
||||
[features "left=105e1" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105 " should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105/5" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105e-1" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105^4" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105LLl" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105.32" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105*3" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105.5" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=L104" should NOT set "left=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=/104" should NOT set "left=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=_104" should NOT set "left=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,42 @@
|
|||
[open-features-non-integer-screenx.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for legacy feature `screenx`]
|
||||
expected: FAIL
|
||||
|
||||
[features "screenx=105.5" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105e1" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105 " should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105*3" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105e-1" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105^4" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105LLl" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105/5" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105.32" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=_104" should NOT set "left=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=L104" should NOT set "left=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=/104" should NOT set "left=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,42 @@
|
|||
[open-features-non-integer-screeny.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for legacy feature `screeny`]
|
||||
expected: FAIL
|
||||
|
||||
[features "screeny=405^4" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405e-1" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405LLl" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405e1" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405 " should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405/5" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405*3" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405.32" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405.5" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=_404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=L404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=/404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,42 @@
|
|||
[open-features-non-integer-top.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for feature `top`]
|
||||
expected: FAIL
|
||||
|
||||
[features "top=105/5" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105*3" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105LLl" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105e-1" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105.32" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105e1" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105 " should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105^4" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105.5" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=/104" should NOT set "top=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=_104" should NOT set "top=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=L104" should NOT set "top=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,48 @@
|
|||
[open-features-non-integer-width.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for feature `width`]
|
||||
expected: FAIL
|
||||
|
||||
[features "width=405^4" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405.5" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405e1" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405 " should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405.32" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405LLl" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405*3" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405e-1" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405/5" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[top=0,left=0: absence of feature "width" should be treated same as "width=0"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=_404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[top=0,left=0,height=401,: absence of feature "width" should be treated same as "width=0"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=/404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=L404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
[opener and "removed" embedded documents]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -9,7 +10,7 @@
|
|||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
[iframe_sandbox_anchor_download_allow_downloads.sub.tentative.html]
|
||||
expected: TIMEOUT
|
||||
[<a download> triggered download in sandbox is allowed by allow-downloads.]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[iframe_sandbox_anchor_download_allow_downloads_without_user_activation.sub.tentative.html]
|
||||
expected: TIMEOUT
|
||||
[<a download> triggered download in sandbox is allowed by allow-downloads-without-user-activation.]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
[iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html]
|
||||
expected: TIMEOUT
|
||||
[Navigation resulted download in sandbox is allowed by allow-downloads.]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[iframe_sandbox_navigation_download_allow_downloads_without_user_activation.sub.tentative.html]
|
||||
expected: TIMEOUT
|
||||
[Navigation resulted download in sandbox is allowed by allow-downloads-without-user-activation.]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-1.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
[non-active-document.html]
|
||||
[DOMParser]
|
||||
expected: FAIL
|
||||
|
||||
[createHTMLDocument]
|
||||
expected: FAIL
|
||||
|
||||
[<template>]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
[form-double-submit-3.html]
|
||||
expected: ERROR
|
||||
[<button> should have the same double-submit protection as <input type=submit>]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[form-double-submit.html]
|
||||
expected: ERROR
|
||||
[default submit action should supersede onclick submit()]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
[toggleEvent.html]
|
||||
[Calling open twice on 'details' fires only one toggle event]
|
||||
expected: FAIL
|
||||
|
||||
[Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
[anchor-with-inline-element.html]
|
||||
expected: TIMEOUT
|
||||
[Clicking on anchor with embedded inline element should navigate instead of opening details]
|
||||
expected: NOTRUN
|
||||
|
||||
[Expected <a> containing <i> to navigate]
|
||||
expected: NOTRUN
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
[realtimeanalyser-fft-scaling.html]
|
||||
expected: TIMEOUT
|
||||
[X 2048-point FFT peak position is not equal to 64. Got 0.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
[018.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, javascript:]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
|
@ -7,7 +7,7 @@ on:
|
|||
jobs:
|
||||
update:
|
||||
# Do not run this job on forks.
|
||||
if: github.repository == "web-platform-tests/wpt"
|
||||
if: github.repository == 'web-platform-tests/wpt'
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
<meta charset=utf-8>
|
||||
<title>Tests basic cookie setting functionality</title>
|
||||
<meta name=help href="https://tools.ietf.org/html/rfc6265#page-8">
|
||||
<meta name="timeout" content="long">
|
||||
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
<script>
|
||||
|
||||
// <'grid-template'> values
|
||||
test_valid_value("grid", 'none');
|
||||
test_valid_value("grid", 'none / none', 'none');
|
||||
test_valid_value("grid", 'auto / auto');
|
||||
test_valid_value("grid", 'none / [a] 0px');
|
||||
test_valid_value("grid", 'none / [] 0px', 'none / 0px');
|
||||
|
@ -25,6 +27,30 @@ test_valid_value("grid", '[a] "a" 10px []', '[a] "a" 10px');
|
|||
test_valid_value("grid", '"a" 10px');
|
||||
test_valid_value("grid", '[] "a" 10px', '"a" 10px');
|
||||
test_valid_value("grid", '[a] "a" 10px [a]');
|
||||
test_valid_value("grid", '"a"');
|
||||
test_valid_value("grid", '"a" auto', '"a"');
|
||||
test_valid_value("grid", '"a" / 10px');
|
||||
test_valid_value("grid", '"a" / 20%');
|
||||
test_valid_value("grid", '"a" / 5fr');
|
||||
test_valid_value("grid", '[a] "a"');
|
||||
test_valid_value("grid", '[a] "a" [a]');
|
||||
test_valid_value("grid", '[] "a"', '"a"');
|
||||
test_valid_value("grid", '"a" [] [] "b"', '"a" "b"');
|
||||
test_valid_value("grid", '"a" [] "b"', '"a" "b"');
|
||||
test_valid_value("grid", '"a" [a] [b] "b"', '"a" [a b] "b"');
|
||||
test_valid_value("grid", '"a" [a] "b"');
|
||||
test_valid_value("grid", '"a" / 0', '"a" / 0px');
|
||||
test_valid_value("grid", '"a" 10px / 10px');
|
||||
test_valid_value("grid", '"a" [a] "b" 10px');
|
||||
test_valid_value("grid", '"a" [a] "b" 10px [a]');
|
||||
test_valid_value("grid", '"a" [a] [a] "b" 10px', '"a" [a a] "b" 10px');
|
||||
test_valid_value("grid", '"a" [a] [] "b" 10px', '"a" [a] "b" 10px');
|
||||
test_valid_value("grid", '"a" 10px [a] "b" [a]');
|
||||
test_valid_value("grid", '"a" [a] "b" [a]');
|
||||
test_valid_value("grid", '[a] "a" [a] "b" [a]');
|
||||
test_valid_value("grid", '"a" "a" [a] "b" [a]');
|
||||
test_valid_value("grid", '"a" [a] "b" [a] / 0', '"a" [a] "b" [a] / 0px');
|
||||
test_valid_value("grid", '"a" "a" [a] [a] "b" / auto', '"a" "a" [a a] "b" / auto');
|
||||
|
||||
// FIXME: add more values to test full syntax
|
||||
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
<body>
|
||||
<script>
|
||||
|
||||
test_valid_value("grid-template", 'none');
|
||||
test_valid_value("grid-template", 'none / none', 'none');
|
||||
test_valid_value("grid-template", 'auto / auto');
|
||||
test_valid_value("grid-template", 'none / [a] 0px');
|
||||
test_valid_value("grid-template", 'none / [] 0px', 'none / 0px');
|
||||
|
@ -24,6 +26,30 @@ test_valid_value("grid-template", '[a] "a" 10px []', '[a] "a" 10px');
|
|||
test_valid_value("grid-template", '"a" 10px');
|
||||
test_valid_value("grid-template", '[] "a" 10px', '"a" 10px');
|
||||
test_valid_value("grid-template", '[a] "a" 10px [a]');
|
||||
test_valid_value("grid-template", '"a"');
|
||||
test_valid_value("grid-template", '"a" auto', '"a"');
|
||||
test_valid_value("grid-template", '"a" / 10px');
|
||||
test_valid_value("grid-template", '"a" / 20%');
|
||||
test_valid_value("grid-template", '"a" / 5fr');
|
||||
test_valid_value("grid-template", '[a] "a"');
|
||||
test_valid_value("grid-template", '[a] "a" [a]');
|
||||
test_valid_value("grid-template", '[] "a"', '"a"');
|
||||
test_valid_value("grid-template", '"a" [] [] "b"', '"a" "b"');
|
||||
test_valid_value("grid-template", '"a" [] "b"', '"a" "b"');
|
||||
test_valid_value("grid-template", '"a" [a] [b] "b"', '"a" [a b] "b"');
|
||||
test_valid_value("grid-template", '"a" [a] "b"');
|
||||
test_valid_value("grid-template", '"a" / 0', '"a" / 0px');
|
||||
test_valid_value("grid-template", '"a" 10px / 10px');
|
||||
test_valid_value("grid-template", '"a" [a] "b" 10px');
|
||||
test_valid_value("grid-template", '"a" [a] "b" 10px [a]');
|
||||
test_valid_value("grid-template", '"a" [a] [a] "b" 10px', '"a" [a a] "b" 10px');
|
||||
test_valid_value("grid-template", '"a" [a] [] "b" 10px', '"a" [a] "b" 10px');
|
||||
test_valid_value("grid-template", '"a" 10px [a] "b" [a]');
|
||||
test_valid_value("grid-template", '"a" [a] "b" [a]');
|
||||
test_valid_value("grid-template", '[a] "a" [a] "b" [a]');
|
||||
test_valid_value("grid-template", '"a" "a" [a] "b" [a]');
|
||||
test_valid_value("grid-template", '"a" [a] "b" [a] / 0', '"a" [a] "b" [a] / 0px');
|
||||
test_valid_value("grid-template", '"a" "a" [a] [a] "b" / auto', '"a" "a" [a a] "b" / auto');
|
||||
|
||||
// FIXME: add more values to test full syntax
|
||||
|
||||
|
|
|
@ -0,0 +1,146 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="UTF-8">
|
||||
<meta charset="UTF-8">
|
||||
<title>mask-position-interpolation</title>
|
||||
<link rel="help" href="https://drafts.fxtf.org/css-masking-1/#the-mask-position">
|
||||
<meta name="assert" content="mask-position supports animation">
|
||||
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/css/support/interpolation-testcommon.js"></script>
|
||||
|
||||
<style>
|
||||
.container {
|
||||
display: inline-block;
|
||||
border: 2px solid black;
|
||||
}
|
||||
.parent {
|
||||
mask-position: 30px 10px;
|
||||
}
|
||||
.target {
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
mask-position: 10px 30px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<body>
|
||||
<template id="target-template">
|
||||
<div class="container">
|
||||
<div class="target"></div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
// neutral
|
||||
test_interpolation({
|
||||
property: 'mask-position',
|
||||
from: neutralKeyframe,
|
||||
to: '20px 20px',
|
||||
}, [
|
||||
{at: -0.25, expect: '7.5px 32.5px'},
|
||||
{at: 0, expect: '10px 30px'},
|
||||
{at: 0.25, expect: '12.5px 27.5px'},
|
||||
{at: 0.5, expect: '15px 25px'},
|
||||
{at: 0.75, expect: '17.5px 22.5px'},
|
||||
{at: 1, expect: '20px 20px'},
|
||||
{at: 1.25, expect: '22.5px 17.5px'},
|
||||
]);
|
||||
|
||||
// initial
|
||||
test_interpolation({
|
||||
property: 'mask-position',
|
||||
from: 'initial',
|
||||
to: '20px 20px',
|
||||
}, [
|
||||
{at: -0.25, expect: 'calc(0% - 5px) calc(0% - 5px)'},
|
||||
{at: 0, expect: '0% 0%'},
|
||||
{at: 0.25, expect: 'calc(0% + 5px) calc(0% + 5px)'},
|
||||
{at: 0.5, expect: 'calc(0% + 10px) calc(0% + 10px)'},
|
||||
{at: 0.75, expect: 'calc(0% + 15px) calc(0% + 15px)'},
|
||||
{at: 1, expect: 'calc(0% + 20px) calc(0% + 20px)'},
|
||||
{at: 1.25, expect:'calc(0% + 25px) calc(0% + 25px)'},
|
||||
]);
|
||||
|
||||
// inherit
|
||||
test_interpolation({
|
||||
property: 'mask-position',
|
||||
from: 'inherit',
|
||||
to: '20px 20px',
|
||||
}, [
|
||||
{at: -0.25, expect: '32.5px 7.5px'},
|
||||
{at: 0, expect: '30px 10px'},
|
||||
{at: 0.25, expect: '27.5px 12.5px'},
|
||||
{at: 0.5, expect: '25px 15px'},
|
||||
{at: 0.75, expect: '22.5px 17.5px'},
|
||||
{at: 1, expect: '20px 20px'},
|
||||
{at: 1.25, expect: '17.5px 22.5px'},
|
||||
]);
|
||||
|
||||
// unset
|
||||
test_interpolation({
|
||||
property: 'mask-position',
|
||||
from: 'unset',
|
||||
to: '20px 20px',
|
||||
}, [
|
||||
{at: -0.25, expect: 'calc(0% - 5px) calc(0% - 5px)'},
|
||||
{at: 0, expect: '0% 0%'},
|
||||
{at: 0.25, expect: 'calc(0% + 5px) calc(0% + 5px)'},
|
||||
{at: 0.5, expect: 'calc(0% + 10px) calc(0% + 10px)'},
|
||||
{at: 0.75, expect: 'calc(0% + 15px) calc(0% + 15px)'},
|
||||
{at: 1, expect: 'calc(0% + 20px) calc(0% + 20px)'},
|
||||
{at: 1.25, expect:'calc(0% + 25px) calc(0% + 25px)'},
|
||||
]);
|
||||
|
||||
// Test equal number of position values as background images.
|
||||
test_interpolation({
|
||||
property: 'mask-position',
|
||||
from: '0px 0px, 0px 0px, 0px 0px, 0px 0px',
|
||||
to: '80px 80px, 80px 80px, 80px 80px, 80px 80px',
|
||||
}, [
|
||||
{at: -0.25, expect: '-20px -20px, -20px -20px, -20px -20px, -20px -20px'},
|
||||
{at: 0, expect: ' 0px 0px, 0px 0px, 0px 0px, 0px 0px'},
|
||||
{at: 0.25, expect: ' 20px 20px, 20px 20px, 20px 20px, 20px 20px'},
|
||||
{at: 0.5, expect: ' 40px 40px, 40px 40px, 40px 40px, 40px 40px'},
|
||||
{at: 0.75, expect: ' 60px 60px, 60px 60px, 60px 60px, 60px 60px'},
|
||||
{at: 1, expect: ' 80px 80px, 80px 80px, 80px 80px, 80px 80px'},
|
||||
{at: 1.25, expect: '100px 100px, 100px 100px, 100px 100px, 100px 100px'},
|
||||
]);
|
||||
|
||||
// Test single position value repeated over background images.
|
||||
test_interpolation({
|
||||
property: 'mask-position',
|
||||
from: 'top 0px left 0px',
|
||||
to: 'left 80px top 80px',
|
||||
}, [
|
||||
{at: -0.25, expect: '-20px -20px'},
|
||||
{at: 0, expect: ' 0px 0px'},
|
||||
{at: 0.25, expect: ' 20px 20px'},
|
||||
{at: 0.5, expect: ' 40px 40px'},
|
||||
{at: 0.75, expect: ' 60px 60px'},
|
||||
{at: 1, expect: ' 80px 80px'},
|
||||
{at: 1.25, expect: '100px 100px'},
|
||||
]);
|
||||
|
||||
// Test mismatched numbers of position values.
|
||||
test_interpolation({
|
||||
property: 'mask-position',
|
||||
from: '0px 0px, 80px 0px',
|
||||
to: '40px 40px, 80px 80px, 0px 80px',
|
||||
}, [
|
||||
{at: -0.25, expect:
|
||||
'-10px -10px, 80px -20px, 0px -20px, 90px -10px, -20px -20px, 100px -20px'},
|
||||
{at: 0, expect:
|
||||
' 0px 0px, 80px 0px, 0px 0px, 80px 0px, 0px 0px, 80px 0px'},
|
||||
{at: 0.25, expect:
|
||||
' 10px 10px, 80px 20px, 0px 20px, 70px 10px, 20px 20px, 60px 20px'},
|
||||
{at: 0.5, expect:
|
||||
' 20px 20px, 80px 40px, 0px 40px, 60px 20px, 40px 40px, 40px 40px'},
|
||||
{at: 0.75, expect:
|
||||
' 30px 30px, 80px 60px, 0px 60px, 50px 30px, 60px 60px, 20px 60px'},
|
||||
{at: 1, expect:
|
||||
' 40px 40px, 80px 80px, 0px 80px, 40px 40px, 80px 80px, 0px 80px'},
|
||||
{at: 1.25, expect:
|
||||
' 50px 50px, 80px 100px, 0px 100px, 30px 50px, 100px 100px, -20px 100px'},
|
||||
]);
|
||||
</script>
|
||||
</body>
|
|
@ -3,7 +3,7 @@
|
|||
<meta name="flags" content="dom">
|
||||
<title>CSS Test: CSSOM View MediaQueryList::{add,remove}Listener</title>
|
||||
<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com">
|
||||
<link rel="help" href="http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface">
|
||||
<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#the-mediaquerylist-interface">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/matchMedia.js"></script>
|
||||
|
@ -11,12 +11,6 @@
|
|||
<script>
|
||||
"use strict";
|
||||
|
||||
test(function() {
|
||||
const mql = window.matchMedia("all");
|
||||
assert_inherits(mql, "addListener");
|
||||
assert_equals(typeof mql.addListener, "function");
|
||||
}, "MediaQueryList::addListener is a function");
|
||||
|
||||
promise_test(async t => {
|
||||
const iframe = await createIFrame(t, 200, 100);
|
||||
const heightMQL = iframe.contentWindow.matchMedia("(max-height: 50px)");
|
||||
|
@ -81,8 +75,7 @@ promise_test(async t => {
|
|||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
|
||||
assert_equals(calls[0], "1st");
|
||||
assert_equals(calls[1], "2nd");
|
||||
assert_array_equals(calls, ["1st", "2nd"]);
|
||||
}, "listeners are called in order they were added");
|
||||
|
||||
promise_test(async t => {
|
||||
|
@ -102,11 +95,48 @@ promise_test(async t => {
|
|||
assert_equals(called, 1);
|
||||
}, "listener that was added twice is called only once");
|
||||
|
||||
test(function() {
|
||||
const mql = window.matchMedia("all");
|
||||
assert_inherits(mql, "removeListener");
|
||||
assert_equals(typeof mql.removeListener, "function");
|
||||
}, "MediaQueryList::removeListener is a function");
|
||||
promise_test(async t => {
|
||||
const iframe = await createIFrame(t, 100);
|
||||
const media = `(min-width: 200px)`;
|
||||
|
||||
const mql1 = iframe.contentWindow.matchMedia(media);
|
||||
const mql2 = iframe.contentWindow.matchMedia(media);
|
||||
const calls = [];
|
||||
|
||||
mql2.addListener(() => {
|
||||
calls.push("mql2");
|
||||
});
|
||||
|
||||
mql1.addListener(() => {
|
||||
calls.push("mql1");
|
||||
});
|
||||
|
||||
iframe.width = "200"; // 100x100 => 200x100
|
||||
await waitForChangesReported();
|
||||
|
||||
assert_array_equals(calls, ["mql1", "mql2"]);
|
||||
}, "listeners are called in order their MQLs were created");
|
||||
|
||||
promise_test(async t => {
|
||||
const iframe = await createIFrame(t, 200);
|
||||
const media = `(max-height: 150px)`;
|
||||
|
||||
const mql1 = iframe.contentWindow.matchMedia(media);
|
||||
const mql2 = iframe.contentWindow.matchMedia(media);
|
||||
|
||||
let calls = 0;
|
||||
const listener = () => {
|
||||
calls++;
|
||||
};
|
||||
|
||||
mql1.addListener(listener);
|
||||
mql2.removeListener(listener);
|
||||
|
||||
iframe.height = "50"; // 200x200 => 200x50
|
||||
await waitForChangesReported();
|
||||
|
||||
assert_equals(calls, 1);
|
||||
}, "removing listener from one MQL doesn't remove it from all MQLs");
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
|
|
@ -0,0 +1,168 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<meta name="flags" content="dom">
|
||||
<title>CSS Test: CSSOM View MediaQueryList extends EventTarget (interop)</title>
|
||||
<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#the-mediaquerylist-interface">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/matchMedia.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
test(() => {
|
||||
const mql = window.matchMedia("all");
|
||||
|
||||
let receivedEvent;
|
||||
mql.addListener(event => {
|
||||
receivedEvent = event;
|
||||
});
|
||||
|
||||
const dispatchedEvent = new Event("change");
|
||||
mql.dispatchEvent(dispatchedEvent);
|
||||
|
||||
assert_equals(receivedEvent, dispatchedEvent);
|
||||
}, "dispatchEvent triggers listener added with addListener");
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let calls = 0;
|
||||
const listener = {
|
||||
handleEvent() {
|
||||
calls++;
|
||||
},
|
||||
};
|
||||
|
||||
mql.addListener(listener);
|
||||
mql.addEventListener("change", listener);
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
assert_equals(calls, 1, "triggerMQLEvent");
|
||||
|
||||
mql.dispatchEvent(new Event("change"));
|
||||
assert_equals(calls, 2, "dispatchEvent");
|
||||
}, "listener added with addListener and addEventListener is called once");
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let calls = 0;
|
||||
const listener = () => {
|
||||
calls++;
|
||||
};
|
||||
|
||||
mql.addListener(listener);
|
||||
mql.addEventListener("change", listener, true);
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
assert_equals(calls, 2, "triggerMQLEvent");
|
||||
|
||||
mql.dispatchEvent(new Event("change"));
|
||||
assert_equals(calls, 4, "dispatchEvent");
|
||||
}, "listener added with addListener and addEventListener (capture) is called twice");
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let calls = 0;
|
||||
const listener = {
|
||||
handleEvent() {
|
||||
calls++;
|
||||
},
|
||||
};
|
||||
|
||||
mql.addListener(listener);
|
||||
mql.removeEventListener("change", listener);
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
assert_equals(calls, 0, "triggerMQLEvent");
|
||||
|
||||
mql.dispatchEvent(new Event("change"));
|
||||
assert_equals(calls, 0, "dispatchEvent");
|
||||
}, "removeEventListener removes listener added with addListener");
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let calls = 0;
|
||||
const listener = () => {
|
||||
calls++;
|
||||
};
|
||||
|
||||
mql.addListener(listener);
|
||||
mql.removeEventListener("change", listener, true);
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
assert_equals(calls, 1, "triggerMQLEvent");
|
||||
|
||||
mql.dispatchEvent(new Event("change"));
|
||||
assert_equals(calls, 2, "dispatchEvent");
|
||||
}, "removeEventListener (capture) doesn't remove listener added with addListener");
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let calls = 0;
|
||||
const listener = {
|
||||
handleEvent() {
|
||||
calls++;
|
||||
},
|
||||
};
|
||||
|
||||
mql.addEventListener("change", listener);
|
||||
mql.removeListener(listener);
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
assert_equals(calls, 0, "triggerMQLEvent");
|
||||
|
||||
mql.dispatchEvent(new Event("change"));
|
||||
assert_equals(calls, 0, "dispatchEvent");
|
||||
}, "removeListener removes listener added with addEventListener");
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let calls = 0;
|
||||
const listener = () => {
|
||||
calls++;
|
||||
};
|
||||
|
||||
mql.addEventListener("change", listener, true);
|
||||
mql.removeListener(listener);
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
assert_equals(calls, 1, "triggerMQLEvent");
|
||||
|
||||
mql.dispatchEvent(new Event("change"));
|
||||
assert_equals(calls, 2, "dispatchEvent");
|
||||
}, "removeListener doesn't remove listener added with addEventListener (capture)");
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let calls = [];
|
||||
mql.addListener(() => {
|
||||
calls.push("addListener");
|
||||
});
|
||||
mql.addEventListener("change", {
|
||||
handleEvent() {
|
||||
calls.push("addEventListener");
|
||||
},
|
||||
}, true);
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
assert_array_equals(calls, ["addEventListener", "addListener"], "triggerMQLEvent");
|
||||
|
||||
calls = [];
|
||||
mql.dispatchEvent(new Event("change"));
|
||||
assert_array_equals(calls, ["addEventListener", "addListener"], "dispatchEvent");
|
||||
}, "listeners are called in order they were added, ignoring capture parameter");
|
||||
</script>
|
|
@ -0,0 +1,118 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<meta name="flags" content="dom">
|
||||
<title>CSS Test: CSSOM View MediaQueryList extends EventTarget</title>
|
||||
<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#the-mediaquerylist-interface">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/matchMedia.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let _event;
|
||||
mql.onchange = event => {
|
||||
_event = event;
|
||||
};
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
assert_equals(_event.media, mql.media);
|
||||
assert_equals(_event.matches, mql.matches);
|
||||
}, "onchange adds listener");
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let calls = 0;
|
||||
mql.onchange = () => {
|
||||
calls++;
|
||||
};
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
assert_equals(calls, 1);
|
||||
|
||||
mql.onchange = null;
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
assert_equals(calls, 1);
|
||||
}, "onchange removes listener");
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let calls = 0;
|
||||
mql.addEventListener("change", {
|
||||
handleEvent() {
|
||||
calls++;
|
||||
},
|
||||
});
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
assert_equals(calls, 1);
|
||||
}, 'listeners for "change" type are called');
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
mql.addEventListener("matches", t.unreached_func("should not be called"));
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
}, 'listeners with different type are not called');
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let calls = 0;
|
||||
mql.addEventListener("change", {
|
||||
handleEvent() {
|
||||
calls++;
|
||||
},
|
||||
}, {once: true});
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
assert_equals(calls, 1);
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
assert_equals(calls, 1);
|
||||
}, 'addEventListener "once" option is respected');
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
const listener = t.unreached_func("should not be called");
|
||||
|
||||
mql.addEventListener("change", listener);
|
||||
mql.removeEventListener("change", listener);
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
}, "removeEventListener removes listener");
|
||||
|
||||
test(() => {
|
||||
const mql = window.matchMedia("all");
|
||||
|
||||
let receivedEvent;
|
||||
mql.addEventListener("custom", event => {
|
||||
receivedEvent = event;
|
||||
event.preventDefault();
|
||||
}, true);
|
||||
|
||||
const dispatchedEvent = new CustomEvent("custom", {
|
||||
cancelable: true,
|
||||
detail: {},
|
||||
});
|
||||
|
||||
const defaultAction = mql.dispatchEvent(dispatchedEvent);
|
||||
|
||||
assert_equals(receivedEvent, dispatchedEvent);
|
||||
assert_false(defaultAction);
|
||||
}, "dispatchEvent works as expected");
|
||||
</script>
|
|
@ -2,18 +2,19 @@
|
|||
<meta charset="utf-8">
|
||||
<meta name="flags" content="dom">
|
||||
<title>CSS Test: CSSOM View MediaQueryListEvent</title>
|
||||
<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#mediaquerylistevent">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<link rel="help" href="https://drafts.csswg.org/cssom-view/#mediaquerylistevent">
|
||||
<script src="resources/matchMedia.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
test(t => {
|
||||
test(() => {
|
||||
assert_equals(new MediaQueryListEvent("test").type, "test");
|
||||
}, 'type can be different from "change"');
|
||||
|
||||
test(t => {
|
||||
test(() => {
|
||||
const event = new MediaQueryListEvent("change");
|
||||
|
||||
assert_equals(event.media, "");
|
||||
|
@ -22,7 +23,7 @@ test(t => {
|
|||
assert_false(event.cancelable);
|
||||
}, "init dictionary default values");
|
||||
|
||||
test(t => {
|
||||
test(() => {
|
||||
const event = new MediaQueryListEvent("change", {
|
||||
media: "test",
|
||||
matches: true,
|
||||
|
@ -35,4 +36,55 @@ test(t => {
|
|||
assert_true(event.bubbles);
|
||||
assert_true(event.cancelable);
|
||||
}, "init dictionary overrides");
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let _event;
|
||||
mql.addListener(event => {
|
||||
_event = event;
|
||||
});
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
|
||||
assert_true(_event instanceof getWindow(mql).MediaQueryListEvent);
|
||||
assert_equals(_event.type, "change");
|
||||
assert_false(_event.bubbles);
|
||||
assert_false(_event.cancelable);
|
||||
}, "argument of addListener");
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let _event;
|
||||
mql.onchange = event => {
|
||||
_event = event;
|
||||
};
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
|
||||
assert_true(_event instanceof getWindow(mql).MediaQueryListEvent);
|
||||
assert_equals(_event.type, "change");
|
||||
assert_false(_event.bubbles);
|
||||
assert_false(_event.cancelable);
|
||||
}, "argument of onchange");
|
||||
|
||||
promise_test(async t => {
|
||||
const mql = await createMQL(t);
|
||||
|
||||
let _event;
|
||||
mql.addEventListener("change", event => {
|
||||
_event = event;
|
||||
});
|
||||
|
||||
triggerMQLEvent(mql);
|
||||
await waitForChangesReported();
|
||||
|
||||
assert_true(_event instanceof getWindow(mql).MediaQueryListEvent);
|
||||
assert_equals(_event.type, "change");
|
||||
assert_false(_event.bubbles);
|
||||
assert_false(_event.cancelable);
|
||||
}, 'constructor of "change" event');
|
||||
</script>
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
<meta name="flags" content="dom">
|
||||
<title>CSS Test: CSSOM View matchMedia and MediaQueryList</title>
|
||||
<link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com">
|
||||
<link rel="help" href="http://www.w3.org/TR/cssom-view/#dom-window-matchmedia">
|
||||
<link rel="help" href="http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface">
|
||||
<link rel="help" href="http://www.w3.org/TR/cssom-1/#serializing-media-queries">
|
||||
<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#dom-window-matchmedia">
|
||||
<link rel="help" href="https://www.w3.org/TR/cssom-view-1/#the-mediaquerylist-interface">
|
||||
<link rel="help" href="https://www.w3.org/TR/cssom-1/#serializing-media-queries">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/matchMedia.js"></script>
|
||||
|
|
|
@ -1,15 +1,20 @@
|
|||
"use strict";
|
||||
|
||||
{
|
||||
// private variables are defined with `const` so they don't leak outside this block statement
|
||||
const IFRAME_DEFAULT_SIZE = "200";
|
||||
const iframes = new WeakMap();
|
||||
|
||||
async function createMQL(t) {
|
||||
// helpers are defined with `var` so they are globally accessible
|
||||
var createMQL = async t => {
|
||||
const iframe = await createIFrame(t);
|
||||
const mql = iframe.contentWindow.matchMedia(`(max-width: ${IFRAME_DEFAULT_SIZE}px)`);
|
||||
assert_true(mql.matches, "MQL should match on newly created <iframe>");
|
||||
iframes.set(mql, iframe);
|
||||
return mql;
|
||||
}
|
||||
};
|
||||
|
||||
function createIFrame(t, width = IFRAME_DEFAULT_SIZE, height = width) {
|
||||
var createIFrame = (t, width = IFRAME_DEFAULT_SIZE, height = width) => {
|
||||
assert_not_equals(document.body, null, "<body> element is missing");
|
||||
|
||||
const iframe = document.createElement("iframe");
|
||||
|
@ -30,16 +35,24 @@ function createIFrame(t, width = IFRAME_DEFAULT_SIZE, height = width) {
|
|||
|
||||
document.body.appendChild(iframe);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
function triggerMQLEvent(mql) {
|
||||
var triggerMQLEvent = mql => {
|
||||
const iframe = iframes.get(mql);
|
||||
assert_not_equals(iframe, undefined, "Passed MQL instance was not created with createMQL");
|
||||
iframe.width = iframe.width === IFRAME_DEFAULT_SIZE ? "250" : IFRAME_DEFAULT_SIZE;
|
||||
}
|
||||
};
|
||||
|
||||
function waitForChangesReported() {
|
||||
var getWindow = mql => {
|
||||
const iframe = iframes.get(mql);
|
||||
assert_not_equals(iframe, undefined, "Passed MQL instance was not created with createMQL");
|
||||
return iframe.contentWindow;
|
||||
};
|
||||
|
||||
var waitForChangesReported = () => {
|
||||
return new Promise(resolve => {
|
||||
step_timeout(resolve, 75);
|
||||
});
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
<title>CSSOM automated IDL tests</title>
|
||||
<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
|
||||
<link rel="help" href="https://drafts.csswg.org/cssom-1/#idl-index">
|
||||
<meta name="timeout" content="long">
|
||||
<script src=/resources/testharness.js></script>
|
||||
<script src=/resources/testharnessreport.js></script>
|
||||
<script src=/resources/WebIDLParser.js></script>
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Listeners are invoked in correct order (AT_TARGET phase)</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
test(() => {
|
||||
const el = document.createElement("div");
|
||||
const expectedOrder = ["capturing", "bubbling"];
|
||||
|
||||
let actualOrder = [];
|
||||
el.addEventListener("click", evt => {
|
||||
assert_equals(evt.eventPhase, Event.AT_TARGET);
|
||||
actualOrder.push("bubbling");
|
||||
}, false);
|
||||
el.addEventListener("click", evt => {
|
||||
assert_equals(evt.eventPhase, Event.AT_TARGET);
|
||||
actualOrder.push("capturing");
|
||||
}, true);
|
||||
|
||||
el.dispatchEvent(new Event("click", {bubbles: true}));
|
||||
assert_array_equals(actualOrder, expectedOrder, "bubbles: true");
|
||||
|
||||
actualOrder = [];
|
||||
el.dispatchEvent(new Event("click", {bubbles: false}));
|
||||
assert_array_equals(actualOrder, expectedOrder, "bubbles: false");
|
||||
}, "Listeners are invoked in correct order (AT_TARGET phase)");
|
||||
</script>
|
|
@ -7,7 +7,7 @@ const ignore_features_for_auxilary_context = ["popups", "scripts"];
|
|||
|
||||
// Feature-policies that represent specific sandbox flags.
|
||||
const sandbox_features = [
|
||||
"downloads-without-user-activation", "forms", "modals", "orientation-lock",
|
||||
"downloads", "forms", "modals", "orientation-lock",
|
||||
"pointer-lock", "popups", "presentation", "scripts", "top-navigation"];
|
||||
|
||||
// TODO(ekaramad): Figure out different inheritance requirements for different
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
|
||||
function create_test(host, expectations) {
|
||||
async_test(t => {
|
||||
assert_precondition("HTMLPortalElement" in window, "Portals are not supported.");
|
||||
|
||||
let p = document.createElement('portal');
|
||||
p.addEventListener('message', t.step_func(e => {
|
||||
assert_header_equals(e.data, expectations, `{{host}} -> ${host} portal`);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title><a download> triggered download in sandbox is allowed by allow-downloads-without-user-activation.</title>
|
||||
<title><a download> triggered download in sandbox is allowed by allow-downloads.</title>
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-iframe-sandbox">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-iframe-element">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
|
@ -14,7 +14,7 @@ async_test(t => {
|
|||
const token = "{{$id:uuid()}}";
|
||||
var iframe = document.createElement("iframe");
|
||||
iframe.srcdoc = "<a>Download</a>";
|
||||
iframe.sandbox = "allow-same-origin allow-downloads-without-user-activation";
|
||||
iframe.sandbox = "allow-same-origin allow-downloads";
|
||||
iframe.onload = t.step_func(function () {
|
||||
iframe.contentWindow.addEventListener(
|
||||
"unload", t.unreached_func("Unexpected navigation."));
|
||||
|
@ -26,6 +26,6 @@ async_test(t => {
|
|||
});
|
||||
|
||||
document.body.appendChild(iframe);
|
||||
}, "<a download> triggered download in sandbox is allowed by allow-downloads-without-user-activation.");
|
||||
}, "<a download> triggered download in sandbox is allowed by allow-downloads.");
|
||||
</script>
|
||||
</body>
|
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Navigation resulted download in sandbox is allowed by allow-downloads-without-user-activation.</title>
|
||||
<title>Navigation resulted download in sandbox is allowed by allow-downloads.</title>
|
||||
<meta name="timeout" content="long" />
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-iframe-sandbox">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-iframe-element">
|
||||
|
@ -15,7 +15,7 @@ async_test(t => {
|
|||
const token = "{{$id:uuid()}}";
|
||||
var iframe = document.createElement("iframe");
|
||||
iframe.srcdoc = "<a>Download</a>";
|
||||
iframe.sandbox = "allow-same-origin allow-downloads-without-user-activation";
|
||||
iframe.sandbox = "allow-same-origin allow-downloads";
|
||||
iframe.onload = t.step_func(function () {
|
||||
iframe.contentWindow.addEventListener(
|
||||
"unload", t.unreached_func("Unexpected navigation."));
|
||||
|
@ -29,6 +29,6 @@ async_test(t => {
|
|||
});
|
||||
|
||||
document.body.appendChild(iframe);
|
||||
}, "Navigation resulted download in sandbox is allowed by allow-downloads-without-user-activation.");
|
||||
}, "Navigation resulted download in sandbox is allowed by allow-downloads.");
|
||||
</script>
|
||||
</body>
|
|
@ -6,5 +6,7 @@ def main(request, response):
|
|||
else:
|
||||
result = request.POST.first('foo') == 'bar'
|
||||
|
||||
result = result and request.url_parts.query == 'query=1'
|
||||
|
||||
return ([("Content-Type", "text/plain")],
|
||||
"OK" if result else "FAIL")
|
||||
|
|
|
@ -96,7 +96,7 @@ function run_simple_test() {
|
|||
var testframe = document.getElementById("testframe");
|
||||
var testdocument = testframe.contentWindow.document;
|
||||
testdocument.body.innerHTML =
|
||||
"<form id=testform method=post action=\"/html/semantics/forms/form-submission-0/resources/form-submission.py\" enctype=\"" + test_obj.enctype + "\">" +
|
||||
"<form id=testform method=post action=\"/html/semantics/forms/form-submission-0/resources/form-submission.py?query=1\" enctype=\"" + test_obj.enctype + "\">" +
|
||||
test_obj.input +
|
||||
test_obj.submitelement +
|
||||
"</form>";
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>summary element: clicking on anchor containing inline element</title>
|
||||
<link rel="author" title="Yu Han" href="mailto:yuzhehan@chromium.org">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/C/#the-summary-element">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
|
||||
<details id="details_i">
|
||||
<summary>Anchor text is wrapped with <i> tag <a href="#with_i_tag"><i id="with_i">permalink</i></a></summary>
|
||||
<p>asdf</p>
|
||||
</details>
|
||||
|
||||
<details id="details_span">
|
||||
<summary>This one uses <span>. <a href="#with_span_tag"><span id="with_span">permalink</span></a></summary>
|
||||
<p>asdf</p>
|
||||
</details>
|
||||
|
||||
<details id="details_svg">
|
||||
<summary>
|
||||
<svg style="width: 100px;" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||
<a href="#inside_svg_w_circle">
|
||||
<circle id="svg_circle" cx="50" cy="40" r="35"/>
|
||||
</a>
|
||||
<a href="#inside_svg_w_text">
|
||||
<text id="svg_text" x="50" y="90" text-anchor="middle">
|
||||
<circle>
|
||||
</text>
|
||||
</a>
|
||||
</svg>
|
||||
</summary>
|
||||
<p>asdf</p>
|
||||
</details>
|
||||
|
||||
<script>
|
||||
function testClickingOnInlineElement(detailsId, targetId, expected, testName) {
|
||||
const details = document.getElementById(detailsId);
|
||||
const target = document.getElementById(targetId);
|
||||
const test = async_test(testName);
|
||||
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
window.onhashchange = test.step_func_done(() => {
|
||||
assert_false(details.open);
|
||||
assert_true(location.hash === expected);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
|
||||
if (target.click) {
|
||||
target.click();
|
||||
}
|
||||
else {
|
||||
// svg element don't have click method
|
||||
target.dispatchEvent(new MouseEvent('click', {
|
||||
view: window,
|
||||
bubbles: true,
|
||||
cancelable: true
|
||||
}));
|
||||
}
|
||||
return promise;
|
||||
};
|
||||
|
||||
async function testAll() {
|
||||
try {
|
||||
await testClickingOnInlineElement("details_i", "with_i", "#with_i_tag", "Expected <a> containing <i> to navigate");
|
||||
await testClickingOnInlineElement("details_span", "with_span", "#with_span_tag", "Expected <a> containing <span> to navigate");
|
||||
await testClickingOnInlineElement("details_svg", "svg_circle", "#inside_svg_w_circle", "Expected <a>, inside svg, containing <circle> to navigate");
|
||||
await testClickingOnInlineElement("details_svg", "svg_text", "#inside_svg_w_text", "Expected <a>, inside svg, containing <text> to navigate");
|
||||
} catch (exception) {
|
||||
assert_unreached("should NOT-THROW exception");
|
||||
}
|
||||
};
|
||||
|
||||
var allTests = async_test("Clicking on anchor with embedded inline element should navigate instead of opening details");
|
||||
testAll().then(()=>{ allTests.done(); });
|
||||
</script>
|
|
@ -0,0 +1,38 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>"handleEvent" property of EventHandler should be ignored</title>
|
||||
<link rel="help" href="https://html.spec.whatwg.org/#eventhandler">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
test(t => {
|
||||
const handler = Object.create(null, {
|
||||
handleEvent: {
|
||||
get: t.unreached_func('"handleEvent" property should not be looked up'),
|
||||
},
|
||||
});
|
||||
|
||||
const el = document.createElement("div");
|
||||
el.onmouseenter = handler;
|
||||
el.dispatchEvent(new MouseEvent("mouseenter"));
|
||||
}, 'plain object "mouseenter" handler');
|
||||
|
||||
async_test(t => {
|
||||
const handler = Object.create(Function.prototype, {
|
||||
handleEvent: {
|
||||
get: t.unreached_func('"handleEvent" property should not be looked up'),
|
||||
},
|
||||
});
|
||||
assert_true(handler instanceof Function);
|
||||
|
||||
window.onmessage = handler;
|
||||
window.postMessage({}, "*");
|
||||
|
||||
step_timeout(() => {
|
||||
t.done();
|
||||
}, 50);
|
||||
}, 'non-callable "message" handler that is instance of Function');
|
||||
</script>
|
|
@ -6,7 +6,7 @@
|
|||
<script src="/resources/testharnessreport.js"></script>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
var t = async_test("body.onresize should set the window.onload handler")
|
||||
var t = async_test("body.onresize should set the window.onresize handler")
|
||||
window.onresize = t.step_func(function() {
|
||||
assert_unreached("This handler should be overwritten.")
|
||||
})
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
// Source: Web Cryptography API (https://w3c.github.io/webcrypto/Overview.html)
|
||||
|
||||
partial interface mixin WindowOrWorkerGlobalScope {
|
||||
readonly attribute Crypto crypto;
|
||||
[SameObject] readonly attribute Crypto crypto;
|
||||
};
|
||||
|
||||
[Exposed=(Window,Worker)]
|
||||
|
@ -160,7 +160,7 @@ dictionary RsaHashedImportParams : Algorithm {
|
|||
|
||||
dictionary RsaPssParams : Algorithm {
|
||||
// The desired length of the random salt
|
||||
[EnforceRange] required unsigned long saltLength;
|
||||
required [EnforceRange] unsigned long saltLength;
|
||||
};
|
||||
|
||||
dictionary RsaOaepParams : Algorithm {
|
||||
|
@ -206,7 +206,7 @@ dictionary AesCtrParams : Algorithm {
|
|||
required BufferSource counter;
|
||||
// The length, in bits, of the rightmost part of the counter block
|
||||
// that is incremented.
|
||||
[EnforceRange] required octet length;
|
||||
required [EnforceRange] octet length;
|
||||
};
|
||||
|
||||
dictionary AesKeyAlgorithm : KeyAlgorithm {
|
||||
|
@ -216,12 +216,12 @@ dictionary AesKeyAlgorithm : KeyAlgorithm {
|
|||
|
||||
dictionary AesKeyGenParams : Algorithm {
|
||||
// The length, in bits, of the key.
|
||||
[EnforceRange] required unsigned short length;
|
||||
required [EnforceRange] unsigned short length;
|
||||
};
|
||||
|
||||
dictionary AesDerivedKeyParams : Algorithm {
|
||||
// The length, in bits, of the key.
|
||||
[EnforceRange] required unsigned short length;
|
||||
required [EnforceRange] unsigned short length;
|
||||
};
|
||||
|
||||
dictionary AesCbcParams : Algorithm {
|
||||
|
@ -272,6 +272,6 @@ dictionary HkdfParams : Algorithm {
|
|||
|
||||
dictionary Pbkdf2Params : Algorithm {
|
||||
required BufferSource salt;
|
||||
[EnforceRange] required unsigned long iterations;
|
||||
required [EnforceRange] unsigned long iterations;
|
||||
required HashAlgorithmIdentifier hash;
|
||||
};
|
||||
|
|
|
@ -85,7 +85,7 @@ enum NDEFPushTarget {
|
|||
};
|
||||
|
||||
dictionary NDEFScanOptions {
|
||||
USVString id = "";
|
||||
USVString id;
|
||||
USVString recordType;
|
||||
USVString mediaType = "";
|
||||
AbortSignal? signal;
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Layout Instability: clip with negative bottom margin</title>
|
||||
<link rel="help" href="https://wicg.github.io/layout-instability/" />
|
||||
<style>
|
||||
|
||||
#scroller { overflow: scroll; width: 200px; height: 500px; }
|
||||
#space { height: 1000px; margin-bottom: -500px; }
|
||||
#j { width: 150px; height: 150px; background: yellow; }
|
||||
|
||||
</style>
|
||||
<div id='scroller'>
|
||||
<div id='space'></div>
|
||||
<div id='j'></div>
|
||||
</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);
|
||||
|
||||
// Increase j's top margin by 100px. Since j is fully clipped by the scroller,
|
||||
// this should not generate a shift.
|
||||
document.querySelector("#j").style.marginTop = "100px";
|
||||
|
||||
await waitForAnimationFrames(3);
|
||||
assert_equals(watcher.score, 0);
|
||||
}, "Clip with negative bottom margin.");
|
||||
|
||||
</script>
|
||||
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Layout Instability: element with compositing layer hint</title>
|
||||
<link rel="help" href="https://wicg.github.io/layout-instability/" />
|
||||
<style>
|
||||
|
||||
#shift {
|
||||
position: relative;
|
||||
width: 500px;
|
||||
height: 200px;
|
||||
background: yellow;
|
||||
}
|
||||
#container {
|
||||
position: absolute;
|
||||
width: 350px;
|
||||
height: 400px;
|
||||
right: 50px;
|
||||
top: 100px;
|
||||
background: #ccc;
|
||||
}
|
||||
.promote { will-change: transform; }
|
||||
|
||||
</style>
|
||||
<div id="container" class="promote">
|
||||
<div id="space"></div>
|
||||
<div id="shift" class="promote"></div>
|
||||
</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);
|
||||
|
||||
// Induce a shift.
|
||||
document.querySelector("#space").style = "height: 100px";
|
||||
|
||||
// #shift is 400x200 after viewport intersection with correct application of
|
||||
// composited #container offset, and 100px lower after shifting, so impact
|
||||
// region is 400 * (200 + 100).
|
||||
const expectedScore = computeExpectedScore(400 * (200 + 100), 100);
|
||||
|
||||
// Observer fires after the frame is painted.
|
||||
assert_equals(watcher.score, 0);
|
||||
await watcher.promise;
|
||||
assert_equals(watcher.score, expectedScore);
|
||||
}, "Element with compositing layer hint.");
|
||||
|
||||
</script>
|
|
@ -0,0 +1,32 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Layout Instability: fully clipped visual rect</title>
|
||||
<link rel="help" href="https://wicg.github.io/layout-instability/" />
|
||||
<style>
|
||||
|
||||
body { margin: 0; }
|
||||
#clip { width: 0px; height: 600px; overflow: hidden; }
|
||||
#j { position: relative; width: 300px; height: 200px; }
|
||||
|
||||
</style>
|
||||
<div id='clip'><div id='j'></div></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 an element that is fully clipped by its container.
|
||||
document.querySelector("#j").style.top = "200px";
|
||||
|
||||
await waitForAnimationFrames(3);
|
||||
assert_equals(watcher.score, 0);
|
||||
}, "Fully clipped visual rect.");
|
||||
|
||||
</script>
|
||||
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Layout Instability: ignore fixed and sticky positioning</title>
|
||||
<link rel="help" href="https://wicg.github.io/layout-instability/" />
|
||||
<style>
|
||||
|
||||
body { height: 2000px; }
|
||||
#f1, #f2 {
|
||||
position: fixed;
|
||||
width: 300px;
|
||||
height: 100px;
|
||||
left: 100px;
|
||||
}
|
||||
#f1 { top: 0; }
|
||||
#f2 { top: 150px; will-change: transform; }
|
||||
#s1 {
|
||||
position: sticky;
|
||||
width: 200px;
|
||||
height: 100px;
|
||||
left: 450px;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id='f1'>fixed</div>
|
||||
<div id='f2'>fixed composited</div>
|
||||
<div id='s1'>sticky</div>
|
||||
normal
|
||||
|
||||
<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);
|
||||
|
||||
// Scroll down by 50px.
|
||||
document.scrollingElement.scrollTop = 50;
|
||||
|
||||
// Force a layout.
|
||||
document.body.style.height = "2500px";
|
||||
|
||||
// No layout shift should occur as a result of the scroll-triggered
|
||||
// repositioning of fixed and sticky elements.
|
||||
await waitForAnimationFrames(3);
|
||||
assert_equals(watcher.score, 0);
|
||||
}, 'Ignore fixed and sticky.');
|
||||
|
||||
</script>
|
|
@ -0,0 +1,32 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Layout Instability: local shift without viewport shift</title>
|
||||
<link rel="help" href="https://wicg.github.io/layout-instability/" />
|
||||
<style>
|
||||
|
||||
#c { position: relative; width: 300px; height: 100px; transform: scale(0.1); }
|
||||
#j { position: relative; width: 100px; height: 10px; }
|
||||
|
||||
</style>
|
||||
<div id='c'>
|
||||
<div id='j'></div>
|
||||
</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);
|
||||
|
||||
document.querySelector("#j").style.top = "4px";
|
||||
|
||||
// Make sure no shift score is reported, since the element didn't move in the
|
||||
// viewport.
|
||||
await waitForAnimationFrames(3);
|
||||
assert_equals(watcher.score, 0);
|
||||
}, "Local shift without viewport shift.");
|
||||
|
||||
</script>
|
|
@ -0,0 +1,36 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Layout Instability: multi clip visual rect</title>
|
||||
<link rel="help" href="https://wicg.github.io/layout-instability/" />
|
||||
<style>
|
||||
|
||||
body { margin: 0; }
|
||||
#outer { width: 200px; height: 600px; overflow: hidden; }
|
||||
#inner { width: 300px; height: 150px; overflow: hidden; }
|
||||
#j { position: relative; width: 300px; height: 600px; }
|
||||
|
||||
</style>
|
||||
<div id='outer'><div id='inner'><div id='j'></div></div></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);
|
||||
|
||||
document.querySelector("#j").style.top = "-200px";
|
||||
|
||||
// Note that, while the element moves up 200px, its visibility is
|
||||
// clipped at 0px,150px height, so the additional 200px of vertical
|
||||
// move distance is not included in the score.
|
||||
// (clip width 200) * (clip height 150)
|
||||
const expectedScore = computeExpectedScore(200 * 150, 200);
|
||||
|
||||
await watcher.promise;
|
||||
assert_equals(watcher.score, expectedScore);
|
||||
}, "Multi clip visual rect.");
|
||||
|
||||
</script>
|
|
@ -0,0 +1,32 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Layout Instability: partially clipped visual rect</title>
|
||||
<link rel="help" href="https://wicg.github.io/layout-instability/" />
|
||||
<style>
|
||||
|
||||
body { margin: 0; }
|
||||
#clip { width: 150px; height: 600px; overflow: hidden; }
|
||||
#j { position: relative; width: 300px; height: 200px; }
|
||||
|
||||
</style>
|
||||
<div id='clip'><div id='j'></div></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);
|
||||
|
||||
document.querySelector("#j").style.top = "200px";
|
||||
|
||||
// (clipped width 150px) * (height 200 + movement 200)
|
||||
const expectedScore = computeExpectedScore(150 * (200 + 200), 200);
|
||||
|
||||
await watcher.promise;
|
||||
assert_equals(watcher.score, expectedScore);
|
||||
}, "Partially clipped visual rect.");
|
||||
|
||||
</script>
|
|
@ -0,0 +1,34 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Layout Instability: shift into viewport</title>
|
||||
<link rel="help" href="https://wicg.github.io/layout-instability/" />
|
||||
<style>
|
||||
|
||||
body { margin: 0; }
|
||||
#j { position: relative; width: 600px; height: 200px; top: 600px; }
|
||||
|
||||
</style>
|
||||
<div id='j'></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);
|
||||
|
||||
document.querySelector("#j").style.top = "400px";
|
||||
|
||||
// The element moves from outside the viewport to within the viewport, which
|
||||
// should generate a shift.
|
||||
// (width 600) * (height 0 + move 200)
|
||||
const expectedScore = computeExpectedScore(600 * 200, 200);
|
||||
|
||||
await watcher.promise;
|
||||
assert_equals(watcher.score, expectedScore);
|
||||
}, "Shift into viewport.");
|
||||
|
||||
</script>
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Layout Instability: shift outside viewport</title>
|
||||
<link rel="help" href="https://wicg.github.io/layout-instability/" />
|
||||
<style>
|
||||
|
||||
body { margin: 0; }
|
||||
#j { position: relative; width: 600px; height: 200px; top: 600px; }
|
||||
|
||||
</style>
|
||||
<div id='j'></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);
|
||||
|
||||
document.querySelector("#j").style.top = "800px";
|
||||
|
||||
// Since the element moves entirely outside of the viewport, it shouldn't
|
||||
// generate a score.
|
||||
await waitForAnimationFrames(3);
|
||||
assert_equals(watcher.score, 0);
|
||||
}, "Shift outside viewport.");
|
||||
|
||||
</script>
|
||||
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Layout Instability: shift while scrolled</title>
|
||||
<link rel="help" href="https://wicg.github.io/layout-instability/" />
|
||||
<style>
|
||||
|
||||
body { height: 2000px; margin: 0; }
|
||||
#shift { position: relative; width: 300px; height: 200px; }
|
||||
|
||||
</style>
|
||||
<div id="shift"></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);
|
||||
|
||||
// Scroll down by 100px.
|
||||
document.scrollingElement.scrollTop = 100;
|
||||
assert_equals(watcher.score, 0);
|
||||
|
||||
// Generate a layout shift.
|
||||
document.querySelector("#shift").style = "top: 60px";
|
||||
|
||||
// Impact region: width * (height - scrollTop + moveDistance)
|
||||
const expectedScore = computeExpectedScore(
|
||||
300 * (200 - 100 + 60), 60);
|
||||
|
||||
await watcher.promise;
|
||||
assert_equals(watcher.score, expectedScore);
|
||||
}, 'Layout shift with non-zero scroll offset.');
|
||||
|
||||
</script>
|
|
@ -0,0 +1,56 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Layout Instability: shift with counterscroll not counted</title>
|
||||
<link rel="help" href="https://wicg.github.io/layout-instability/" />
|
||||
<style>
|
||||
|
||||
#s {
|
||||
overflow: scroll;
|
||||
position: absolute;
|
||||
left: 20px;
|
||||
top: 20px;
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
}
|
||||
#sp {
|
||||
width: 170px;
|
||||
height: 600px;
|
||||
}
|
||||
#ch {
|
||||
position: relative;
|
||||
background: yellow;
|
||||
left: 10px;
|
||||
top: 100px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="s">
|
||||
<div id="sp">
|
||||
<div id="ch"></div>
|
||||
</div>
|
||||
</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);
|
||||
|
||||
let scroller = document.querySelector("#s");
|
||||
let changer = document.querySelector("#ch");
|
||||
|
||||
changer.style.top = "200px";
|
||||
scroller.scrollTop = 100;
|
||||
|
||||
await waitForAnimationFrames(3);
|
||||
assert_equals(watcher.score, 0);
|
||||
}, "Shift with counterscroll not counted.");
|
||||
|
||||
</script>
|
||||
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>RTL ms lquote="X" rquote="p"</title>
|
||||
<title>ms legacy lquote and rquote attributes (reference)</title>
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
math {
|
||||
|
@ -14,7 +14,7 @@
|
|||
|
||||
<p>
|
||||
<math>
|
||||
<ms lquote="p" rquote="X">É</ms>
|
||||
<ms>X</ms>
|
||||
</math>
|
||||
</p>
|
||||
|
|
@ -2,12 +2,12 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>RTL ms lquote="X" rquote="p"</title>
|
||||
<title>ms legacy lquote and rquote attributes</title>
|
||||
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#attributes-common-to-html-and-mathml-elements">
|
||||
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#css-styling">
|
||||
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#string-literal-ms">
|
||||
<meta name="assert" content="Verify that a RTL ms element renders the same as if its left and right quotes were switched.">
|
||||
<link rel="match" href="direction-009-ref.html">
|
||||
<meta name="assert" content="Verify that legacy lquote and rquote attributes are ignored on the ms element.">
|
||||
<link rel="match" href="ms-001-ref.html">
|
||||
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
|
||||
<style>
|
||||
math {
|
||||
|
@ -18,13 +18,13 @@
|
|||
<body>
|
||||
|
||||
<p>
|
||||
<math dir="rtl">
|
||||
<ms lquote="X" rquote="p">É</ms>
|
||||
<math>
|
||||
<ms lquote="É" rquote="p">X</ms>
|
||||
</math>
|
||||
</p>
|
||||
|
||||
<script src="/mathml/support/feature-detection.js"></script>
|
||||
<script>MathMLFeatureDetection.ensure_for_match_reftest("has_dir");</script>
|
||||
<script>MathMLFeatureDetection.ensure_for_match_reftest("has_ms");</script>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,17 @@
|
|||
<!DOCTYPE html>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
|
||||
promise_test(async (t) => {
|
||||
let hostWindow = window.open();
|
||||
assert_equals(hostWindow.location.href, "about:blank");
|
||||
|
||||
let portal = hostWindow.document.createElement("portal");
|
||||
portal.src = "resources/simple-portal.html";
|
||||
hostWindow.document.body.appendChild(portal);
|
||||
|
||||
await promise_rejects(t, "InvalidStateError", portal.activate());
|
||||
}, "about:blank cannot host a portal");
|
||||
|
||||
</script>
|
|
@ -2,6 +2,7 @@
|
|||
<title>Tests passing of data along with portal activation</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/open-blank-host.js"></script>
|
||||
<body>
|
||||
<canvas id="canvas"></canvas>
|
||||
<script>
|
||||
|
@ -12,7 +13,7 @@ function nextMessage(target) {
|
|||
}
|
||||
|
||||
async function openPortalAndActivate(logic, activateOptions) {
|
||||
const w = window.open();
|
||||
const w = await openBlankPortalHost();
|
||||
try {
|
||||
const portal = w.document.createElement('portal');
|
||||
portal.src = new URL('resources/portal-activate-data-portal.html?logic=' + encodeURIComponent(logic), location.href);
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
<!DOCTYPE html>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/open-blank-host.js"></script>
|
||||
<script>
|
||||
promise_test(async () => {
|
||||
var win = window.open();
|
||||
var win = await openBlankPortalHost();
|
||||
var portal = win.document.createElement("portal");
|
||||
portal.src = new URL("resources/simple-portal.html", location.href)
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/open-blank-host.js"></script>
|
||||
<script>
|
||||
function nextMessage(target) {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
@ -10,7 +11,7 @@ function nextMessage(target) {
|
|||
|
||||
async function openPortalAndActivate(logic) {
|
||||
let {port1, port2} = new MessageChannel();
|
||||
const w = window.open();
|
||||
const w = await openBlankPortalHost();
|
||||
try {
|
||||
const portal = w.document.createElement('portal');
|
||||
portal.src = new URL('resources/eval-portal.html?logic=' + encodeURIComponent(logic), location.href);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/open-blank-host.js"></script>
|
||||
<script>
|
||||
function nextMessage(target) {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
@ -9,7 +10,7 @@ function nextMessage(target) {
|
|||
}
|
||||
|
||||
promise_test(async () => {
|
||||
const w = window.open();
|
||||
const w = await openBlankPortalHost();
|
||||
try {
|
||||
const portal = w.document.createElement('portal');
|
||||
portal.src = new URL('resources/simple-portal-adopts-predecessor.html', location.href);
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<!--
|
||||
This is a blank page used when a test needs a new window to host and activate
|
||||
a portal. Tests cannot simply use window.open() without a URL as about:blank
|
||||
may not host a portal.
|
||||
-->
|
||||
<body>
|
||||
</body>
|
|
@ -0,0 +1,14 @@
|
|||
// Portal tests often need to create portals in a context other than the one
|
||||
// in which the tests are running. This is because the host context may be
|
||||
// discarded during the course of the test.
|
||||
|
||||
// Opens a blank page for use as a portal host.
|
||||
// Tests cannot simply use window.open() without a URL as about:blank may not
|
||||
// host a portal.
|
||||
async function openBlankPortalHost() {
|
||||
let hostWindow = window.open('/portals/resources/blank-host.html');
|
||||
await new Promise((resolve) => {
|
||||
hostWindow.addEventListener('load', resolve, {once: true});
|
||||
});
|
||||
return hostWindow;
|
||||
}
|
|
@ -8,7 +8,7 @@ const SmsProvider = (() => {
|
|||
this.mojoReceiver_ = new blink.mojom.SmsReceiverReceiver(this);
|
||||
|
||||
this.interceptor_ = new MojoInterfaceInterceptor(
|
||||
blink.mojom.SmsReceiver.$interfaceName, "context", true)
|
||||
blink.mojom.SmsReceiver.$interfaceName, "context", true);
|
||||
|
||||
this.interceptor_.oninterfacerequest = (e) => {
|
||||
this.mojoReceiver_.$.bindHandle(e.handle);
|
||||
|
@ -18,15 +18,16 @@ const SmsProvider = (() => {
|
|||
this.returnValues_ = {};
|
||||
}
|
||||
|
||||
receive() {
|
||||
async receive() {
|
||||
let call = this.returnValues_.receive ?
|
||||
this.returnValues_.receive.shift() : null;
|
||||
if (!call) {
|
||||
throw new Error("Unexpected call.");
|
||||
}
|
||||
if (!call)
|
||||
return;
|
||||
return call();
|
||||
}
|
||||
|
||||
async abort() {}
|
||||
|
||||
pushReturnValuesForTesting(callName, value) {
|
||||
this.returnValues_[callName] = this.returnValues_[callName] || [];
|
||||
this.returnValues_[callName].push(value);
|
||||
|
|
|
@ -114,4 +114,21 @@ promise_test(async t => {
|
|||
}
|
||||
}, 'Deal with cancelled requests');
|
||||
|
||||
promise_test(async t => {
|
||||
const controller = new AbortController();
|
||||
const signal = controller.signal;
|
||||
|
||||
controller.abort();
|
||||
await promise_rejects(t, 'AbortError', navigator.sms.receive({signal}));
|
||||
}, 'Should abort request');
|
||||
|
||||
promise_test(async t => {
|
||||
const controller = new AbortController();
|
||||
const signal = controller.signal;
|
||||
|
||||
let error = navigator.sms.receive({signal});
|
||||
controller.abort();
|
||||
await promise_rejects(t, 'AbortError', error);
|
||||
}, 'Should abort request even while request is in progress.');
|
||||
|
||||
</script>
|
||||
|
|
|
@ -13,7 +13,7 @@ interface SMS {
|
|||
};
|
||||
|
||||
dictionary SMSReceiverOptions {
|
||||
// TODO(b/976401): Implement abort controller.
|
||||
AbortSignal signal;
|
||||
};
|
||||
|
||||
[
|
||||
|
|
|
@ -163,9 +163,7 @@ class ServoWebDriverBrowser(Browser):
|
|||
command=" ".join(self.command))
|
||||
|
||||
def is_alive(self):
|
||||
if self.runner:
|
||||
return self.runner.is_running()
|
||||
return False
|
||||
return self.proc.poll() is None
|
||||
|
||||
def cleanup(self):
|
||||
self.stop()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue