mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Auto merge of #23946 - servo-wpt-sync:wpt_update_10-08-2019, r=servo-wpt-sync
Sync WPT with upstream (10-08-2019) Automated downstream sync of changes from upstream as of 10-08-2019. [no-wpt-sync] <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/23946) <!-- Reviewable:end -->
This commit is contained in:
commit
59f9a3d370
55 changed files with 895 additions and 104 deletions
|
@ -7,7 +7,7 @@
|
|||
expected: FAIL
|
||||
|
||||
[Opening a blob URL in a new window immediately before revoking it works.]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
|
||||
expected: FAIL
|
||||
|
|
|
@ -14,9 +14,6 @@
|
|||
[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]
|
||||
[Untitled]
|
||||
|
|
|
@ -179605,6 +179605,18 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/filter-effects/backdrop-filter-containing-block.html": [
|
||||
[
|
||||
"css/filter-effects/backdrop-filter-containing-block.html",
|
||||
[
|
||||
[
|
||||
"/css/filter-effects/backdrop-filter-containing-block-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/filter-effects/backdrop-filter-edge-clipping.html": [
|
||||
[
|
||||
"css/filter-effects/backdrop-filter-edge-clipping.html",
|
||||
|
@ -205265,6 +205277,18 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"svg/extensibility/foreignObject/filter-repaint.html": [
|
||||
[
|
||||
"svg/extensibility/foreignObject/filter-repaint.html",
|
||||
[
|
||||
[
|
||||
"/svg/extensibility/foreignObject/filter-repaint-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"svg/extensibility/foreignObject/foreign-object-margin-collapsing.html": [
|
||||
[
|
||||
"svg/extensibility/foreignObject/foreign-object-margin-collapsing.html",
|
||||
|
@ -227707,6 +227731,12 @@
|
|||
"console/META.yml": [
|
||||
[]
|
||||
],
|
||||
"contacts/resources/helpers.js": [
|
||||
[]
|
||||
],
|
||||
"contacts/resources/non-main-frame-select.html": [
|
||||
[]
|
||||
],
|
||||
"content-security-policy/META.yml": [
|
||||
[]
|
||||
],
|
||||
|
@ -260404,6 +260434,9 @@
|
|||
"css/filter-effects/backdrop-filter-clipped-ref.html": [
|
||||
[]
|
||||
],
|
||||
"css/filter-effects/backdrop-filter-containing-block-ref.html": [
|
||||
[]
|
||||
],
|
||||
"css/filter-effects/backdrop-filter-edge-pixels-ref.html": [
|
||||
[]
|
||||
],
|
||||
|
@ -266449,6 +266482,9 @@
|
|||
"fetch/sec-metadata/resources/sharedWorker.js": [
|
||||
[]
|
||||
],
|
||||
"fetch/sec-metadata/resources/unload-with-beacon.html": [
|
||||
[]
|
||||
],
|
||||
"fetch/sec-metadata/resources/xslt-test.sub.xml": [
|
||||
[]
|
||||
],
|
||||
|
@ -278329,6 +278365,9 @@
|
|||
"resources/chromium/big_buffer.mojom.js.headers": [
|
||||
[]
|
||||
],
|
||||
"resources/chromium/contacts_manager_mock.js": [
|
||||
[]
|
||||
],
|
||||
"resources/chromium/device.mojom.js": [
|
||||
[]
|
||||
],
|
||||
|
@ -280936,6 +280975,9 @@
|
|||
"svg/extensibility/foreignObject/compositing-backface-visibility-ref.html": [
|
||||
[]
|
||||
],
|
||||
"svg/extensibility/foreignObject/filter-repaint-ref.html": [
|
||||
[]
|
||||
],
|
||||
"svg/extensibility/foreignObject/foreign-object-paints-before-rect-ref.html": [
|
||||
[]
|
||||
],
|
||||
|
@ -306974,6 +307016,27 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"contacts/contacts-select.https.window.js": [
|
||||
[
|
||||
"contacts/contacts-select.https.window.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"script",
|
||||
"/resources/testdriver.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"/resources/testdriver-vendor.js"
|
||||
],
|
||||
[
|
||||
"script",
|
||||
"resources/helpers.js"
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
],
|
||||
"content-security-policy/base-uri/base-uri-allow.sub.html": [
|
||||
[
|
||||
"content-security-policy/base-uri/base-uri-allow.sub.html",
|
||||
|
@ -319491,9 +319554,15 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-sizing/inheritance.html": [
|
||||
"css/css-sizing/inheritance-001.html": [
|
||||
[
|
||||
"css/css-sizing/inheritance.html",
|
||||
"css/css-sizing/inheritance-001.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-sizing/inheritance-002.html": [
|
||||
[
|
||||
"css/css-sizing/inheritance-002.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
|
@ -328597,6 +328666,12 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"custom-elements/form-associated/ElementInternals-accessibility.html": [
|
||||
[
|
||||
"custom-elements/form-associated/ElementInternals-accessibility.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"custom-elements/form-associated/ElementInternals-labels.html": [
|
||||
[
|
||||
"custom-elements/form-associated/ElementInternals-labels.html",
|
||||
|
@ -346038,6 +346113,14 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"fetch/sec-metadata/unload.tentative.https.sub.html": [
|
||||
[
|
||||
"fetch/sec-metadata/unload.tentative.https.sub.html",
|
||||
{
|
||||
"testdriver": true
|
||||
}
|
||||
]
|
||||
],
|
||||
"fetch/sec-metadata/window-open.tentative.https.sub.html": [
|
||||
[
|
||||
"fetch/sec-metadata/window-open.tentative.https.sub.html",
|
||||
|
@ -391237,6 +391320,23 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"service-workers/service-worker/ServiceWorkerGlobalScope/fetch-on-the-right-interface.https.any.js": [
|
||||
[
|
||||
"service-workers/service-worker/ServiceWorkerGlobalScope/fetch-on-the-right-interface.https.any.serviceworker.html",
|
||||
{
|
||||
"script_metadata": [
|
||||
[
|
||||
"title",
|
||||
"fetch method on the right interface"
|
||||
],
|
||||
[
|
||||
"global",
|
||||
"!default,serviceworker"
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
],
|
||||
"service-workers/service-worker/ServiceWorkerGlobalScope/isSecureContext.https.html": [
|
||||
[
|
||||
"service-workers/service-worker/ServiceWorkerGlobalScope/isSecureContext.https.html",
|
||||
|
@ -469277,6 +469377,18 @@
|
|||
"1e7ba76ecddca2ad707784a7ff6edfc270428c26",
|
||||
"testharness"
|
||||
],
|
||||
"contacts/contacts-select.https.window.js": [
|
||||
"8d1fdfbfdff539e7dd17da4b0e28ef01ae47a2d5",
|
||||
"testharness"
|
||||
],
|
||||
"contacts/resources/helpers.js": [
|
||||
"88b2f1656ee7203a6f88ba2c747e2ba192a8335e",
|
||||
"support"
|
||||
],
|
||||
"contacts/resources/non-main-frame-select.html": [
|
||||
"c64ecd067c82d050f989f1cbe005fe0b33bb9e96",
|
||||
"support"
|
||||
],
|
||||
"content-security-policy/META.yml": [
|
||||
"ee8f1ea7e07b94711ddc65e43a6c32dbc5983612",
|
||||
"support"
|
||||
|
@ -472290,7 +472402,7 @@
|
|||
"support"
|
||||
],
|
||||
"cookie-store/serviceworker_cookieStore_arguments.tentative.https.html": [
|
||||
"06c950149751ab6e264c3bd12c826d8a60b9baf6",
|
||||
"7d006926dac7883deb5e92b01bcc103ab3e1ea83",
|
||||
"testharness"
|
||||
],
|
||||
"cookie-store/serviceworker_cookieStore_basic.js": [
|
||||
|
@ -472298,7 +472410,7 @@
|
|||
"support"
|
||||
],
|
||||
"cookie-store/serviceworker_cookieStore_basic.tentative.https.html": [
|
||||
"d4385d64ea993a7ecd8e92da4b722b7951134c30",
|
||||
"379a8d764216ea7479c0df44f7e8dd1b87f149ab",
|
||||
"testharness"
|
||||
],
|
||||
"cookie-store/serviceworker_cookieStore_cross_origin.js": [
|
||||
|
@ -472314,7 +472426,7 @@
|
|||
"support"
|
||||
],
|
||||
"cookie-store/serviceworker_cookieStore_subscriptions.tentative.https.html": [
|
||||
"2f26094aa2e3de355fa5f5778f4ede1c34b59559",
|
||||
"375bce622c348d831c968ae63b90b44ae98de5c2",
|
||||
"testharness"
|
||||
],
|
||||
"cookie-store/serviceworker_cookieStore_subscriptions_basic.js": [
|
||||
|
@ -472322,7 +472434,7 @@
|
|||
"support"
|
||||
],
|
||||
"cookie-store/serviceworker_cookieStore_subscriptions_basic.tentative.https.html": [
|
||||
"525c3b3c5c15007b282008eff8cd541e193764b6",
|
||||
"0353bc2c2096f72450ad6f7b6aad5439e9bd0b20",
|
||||
"testharness"
|
||||
],
|
||||
"cookie-store/serviceworker_cookieStore_subscriptions_empty.js": [
|
||||
|
@ -472330,7 +472442,7 @@
|
|||
"support"
|
||||
],
|
||||
"cookie-store/serviceworker_cookieStore_subscriptions_empty.tentative.https.html": [
|
||||
"38690fe3c72b58c7ed89d263990a2d0a2a1aa16f",
|
||||
"38ec4048f1944c3f6bfe904592ee0646e28979f2",
|
||||
"testharness"
|
||||
],
|
||||
"cookie-store/serviceworker_cookieStore_subscriptions_eventhandler_attribute.js": [
|
||||
|
@ -558794,7 +558906,7 @@
|
|||
"support"
|
||||
],
|
||||
"css/css-inline/inheritance.html": [
|
||||
"f4c93b5b2531e0c4b32ed99a34ec71abe33c6cd9",
|
||||
"7728f67e159eabbcb9dcc87d1a1db1d14b370cb3",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-inline/inline-crash-chrome-001.html": [
|
||||
|
@ -569753,8 +569865,12 @@
|
|||
"5b1713975eb21e96a558933f81412a7bb0007d19",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-sizing/inheritance.html": [
|
||||
"367ad0201daa5a307f8e87432c49f9719fa80191",
|
||||
"css/css-sizing/inheritance-001.html": [
|
||||
"2516288e48685cc22a5b7ca4051d3c605671ea79",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-sizing/inheritance-002.html": [
|
||||
"2af768b2c49fa973db7f5871e21f9f9c6442f81a",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-sizing/intrinsic-percent-non-replaced-001-ref.html": [
|
||||
|
@ -598525,6 +598641,14 @@
|
|||
"bc25b25944f47d6f053580939752803f0b929c99",
|
||||
"reftest"
|
||||
],
|
||||
"css/filter-effects/backdrop-filter-containing-block-ref.html": [
|
||||
"f429dd9a3351cc5580a312549e02a2fbe8db2ccc",
|
||||
"support"
|
||||
],
|
||||
"css/filter-effects/backdrop-filter-containing-block.html": [
|
||||
"7300d7da86988ee92137ff35ef8b027f96f061c4",
|
||||
"reftest"
|
||||
],
|
||||
"css/filter-effects/backdrop-filter-edge-clipping.html": [
|
||||
"5d09c414497de3d1d34bf2a6032c94c87a9bdb82",
|
||||
"reftest"
|
||||
|
@ -611717,6 +611841,10 @@
|
|||
"0d8a5ffc8c35016ef33dedc73fdd0b2c1c1fef59",
|
||||
"testharness"
|
||||
],
|
||||
"custom-elements/form-associated/ElementInternals-accessibility.html": [
|
||||
"f5d96643ba23e6549d854649912626668f6118a1",
|
||||
"testharness"
|
||||
],
|
||||
"custom-elements/form-associated/ElementInternals-labels.html": [
|
||||
"94e0a0457ef35bbf3de7e2cff09650a5b481b5de",
|
||||
"testharness"
|
||||
|
@ -619777,6 +619905,10 @@
|
|||
"5eb89cb4f68a098154cf3605f53318af2f5e56f1",
|
||||
"support"
|
||||
],
|
||||
"fetch/sec-metadata/resources/unload-with-beacon.html": [
|
||||
"b00c9a5776a45ac09a1c8e85b763c6be572fa99f",
|
||||
"support"
|
||||
],
|
||||
"fetch/sec-metadata/resources/xslt-test.sub.xml": [
|
||||
"2d4dff5fc3efff235827cc8024a87710c1377972",
|
||||
"support"
|
||||
|
@ -619809,6 +619941,10 @@
|
|||
"ff0e842d5118cba40b73f09e29cf98be0bcabb12",
|
||||
"testharness"
|
||||
],
|
||||
"fetch/sec-metadata/unload.tentative.https.sub.html": [
|
||||
"89ebc050328c03c47db866ca8d6858bc1909b3fa",
|
||||
"testharness"
|
||||
],
|
||||
"fetch/sec-metadata/window-open.tentative.https.sub.html": [
|
||||
"df13d55cf1ed6f206c9db7f681f56a3f0f834ef3",
|
||||
"testharness"
|
||||
|
@ -641730,15 +641866,15 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/accelerometer.idl": [
|
||||
"3705d4ba0ec93e23254374bd9b8e60dfb2cf0a08",
|
||||
"35b09b8d521640b9b4519d665247a3c48d649386",
|
||||
"support"
|
||||
],
|
||||
"interfaces/ambient-light.idl": [
|
||||
"4e44c082b0709989870e7ed52e14cc77bfb5d6f2",
|
||||
"ce335161a2570fa9f2ab8051c75c0ab71aa2df76",
|
||||
"support"
|
||||
],
|
||||
"interfaces/animation-worklet.idl": [
|
||||
"615a21c76fd1f59910ba5867d4de097e6ecd917e",
|
||||
"02deca73a3a3378c9906776d547a37b7c31e0fb5",
|
||||
"support"
|
||||
],
|
||||
"interfaces/appmanifest.idl": [
|
||||
|
@ -641770,7 +641906,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/console.idl": [
|
||||
"53130711a1173f0517987f176bafa157a7a1f1c0",
|
||||
"3cd3c06b54b022c61857a6a29e8e97bf4fa9b47b",
|
||||
"support"
|
||||
],
|
||||
"interfaces/cookie-store.idl": [
|
||||
|
@ -641862,7 +641998,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/dom.idl": [
|
||||
"1788faae5207bb7a21b23771bf2b0e978ea49a69",
|
||||
"9da68c4b7f82c5fc1cea6076884cfd00c4e36e6c",
|
||||
"support"
|
||||
],
|
||||
"interfaces/element-timing.idl": [
|
||||
|
@ -641870,7 +642006,7 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/encoding.idl": [
|
||||
"b3086b8588cdfec129a4c038c074021cacff83c5",
|
||||
"c89cad4f9a154c467224e3becbd8b12fcb8a1f23",
|
||||
"support"
|
||||
],
|
||||
"interfaces/encrypted-media.idl": [
|
||||
|
@ -642202,11 +642338,11 @@
|
|||
"support"
|
||||
],
|
||||
"interfaces/web-nfc.idl": [
|
||||
"d5fe1c085a2e3a127211c48cca97feb2410349a9",
|
||||
"769eb7dd2f514d8c3e26b355b851588740ee63ee",
|
||||
"support"
|
||||
],
|
||||
"interfaces/web-share.idl": [
|
||||
"ae1f3f8580c0ff038ebe798bd66437ca3eb3fefc",
|
||||
"f433f2314becd82e7446cc00c96108d1f0efe681",
|
||||
"support"
|
||||
],
|
||||
"interfaces/webaudio.idl": [
|
||||
|
@ -666517,6 +666653,10 @@
|
|||
"6c61a34a4ec2e75096db0eb9f7748b142f0db7bb",
|
||||
"support"
|
||||
],
|
||||
"resources/chromium/contacts_manager_mock.js": [
|
||||
"618968ec18da930ad1d3180adb68f05064bb1807",
|
||||
"support"
|
||||
],
|
||||
"resources/chromium/device.mojom.js": [
|
||||
"6488cbc69c29170d9441d2210da27a464f67d445",
|
||||
"support"
|
||||
|
@ -668445,6 +668585,10 @@
|
|||
"89efd7a4a615c1a3ef35b045690fa40b67fb5393",
|
||||
"testharness"
|
||||
],
|
||||
"service-workers/service-worker/ServiceWorkerGlobalScope/fetch-on-the-right-interface.https.any.js": [
|
||||
"9a9c8198057e3b98f5b278fcd4778a71a6211759",
|
||||
"testharness"
|
||||
],
|
||||
"service-workers/service-worker/ServiceWorkerGlobalScope/isSecureContext.https.html": [
|
||||
"399820dd2c313b5023f63ea7846cc1f39fcbb1d6",
|
||||
"testharness"
|
||||
|
@ -673057,6 +673201,14 @@
|
|||
"da0728c96b5d0eb81435efad329bdcc3ee4dfb26",
|
||||
"testharness"
|
||||
],
|
||||
"svg/extensibility/foreignObject/filter-repaint-ref.html": [
|
||||
"07563a617aa00b6561309b4bff5104b4d4d398e6",
|
||||
"support"
|
||||
],
|
||||
"svg/extensibility/foreignObject/filter-repaint.html": [
|
||||
"0388977841e9cef08d8784f2aaf463049245ea20",
|
||||
"reftest"
|
||||
],
|
||||
"svg/extensibility/foreignObject/foreign-object-circular-filter-reference-crash.html": [
|
||||
"162999402ac96dfc966702c554b33b11cf8a1054",
|
||||
"testharness"
|
||||
|
@ -682118,7 +682270,7 @@
|
|||
"support"
|
||||
],
|
||||
"tools/wptrunner/requirements_firefox.txt": [
|
||||
"9d7520dd01f29936cc7e232c2e08b1d5d6f6467a",
|
||||
"78e53e60d94e3267f7f91b0cf6f2f65b6a35fcdc",
|
||||
"support"
|
||||
],
|
||||
"tools/wptrunner/requirements_ie.txt": [
|
||||
|
@ -682306,7 +682458,7 @@
|
|||
"support"
|
||||
],
|
||||
"tools/wptrunner/wptrunner/browsers/firefox.py": [
|
||||
"13739e5103ea0452cc9b6bbda784ebc811027b53",
|
||||
"290fcff5ab22bd5ca19cedb4d3f38f5b8197768f",
|
||||
"support"
|
||||
],
|
||||
"tools/wptrunner/wptrunner/browsers/firefox_android.py": [
|
||||
|
@ -686130,7 +686282,7 @@
|
|||
"support"
|
||||
],
|
||||
"web-share/META.yml": [
|
||||
"e054ccc8ec34058cc749a04cb3f06c0a72368f76",
|
||||
"d2eccca6f424e93cc463fafc5a3b16e5a7ecc565",
|
||||
"support"
|
||||
],
|
||||
"web-share/canShare-files.https.html": [
|
||||
|
@ -686146,7 +686298,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"web-share/idlharness.https.window.js": [
|
||||
"cbaf9d72c5c11d9b75cd4a36aa0cf45bc0db35aa",
|
||||
"1520387caf133dc43c5f036bbf24a99ef73a7f3c",
|
||||
"testharness"
|
||||
],
|
||||
"web-share/resources/manual-helper.js": [
|
||||
|
@ -688286,7 +688438,7 @@
|
|||
"support"
|
||||
],
|
||||
"webdriver/tests/switch_to_window/alerts.py": [
|
||||
"e3a3342449912dafafaac1bec7bf90f98b29c44c",
|
||||
"8824138c2d25c07232847062c4853d73075eb94e",
|
||||
"wdspec"
|
||||
],
|
||||
"webdriver/tests/switch_to_window/switch.py": [
|
||||
|
@ -694042,11 +694194,11 @@
|
|||
"testharness"
|
||||
],
|
||||
"webxr/xrInputSource_gamepad_disconnect.https.html": [
|
||||
"9ec349adeb979975569961382fe47f4c889837dc",
|
||||
"66faf8699640fe3cef81a84d1f290988c35c3e14",
|
||||
"testharness"
|
||||
],
|
||||
"webxr/xrInputSource_gamepad_input_registered.https.html": [
|
||||
"9213657a367bb0dd8872ff10120d705b08c0f6e6",
|
||||
"cb1ce7780b42eec33f6732efad8619755e899e06",
|
||||
"testharness"
|
||||
],
|
||||
"webxr/xrInputSource_profiles.https.html": [
|
||||
|
|
|
@ -3,9 +3,3 @@
|
|||
[scroll-behavior: smooth on DIV element]
|
||||
expected: FAIL
|
||||
|
||||
[Smooth scrolling while doing history navigation.]
|
||||
expected: FAIL
|
||||
|
||||
[Instant scrolling while doing history navigation.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[backdrop-filter-containing-block.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,4 @@
|
|||
[ElementInternals-accessibility.html]
|
||||
[ElementInternals-accessibility]
|
||||
expected: FAIL
|
||||
|
|
@ -318,9 +318,15 @@
|
|||
[<iframe>: combined response Content-Type: */* text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
[<iframe>: combined response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56,3 +56,9 @@
|
|||
[separate text/javascript x/x]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,6 +11,6 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%0C]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20'NosniFF']
|
||||
[X-Content-Type-Options%3A%20%2Cnosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_2.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
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[non-active-document.html]
|
||||
[DOMParser]
|
||||
expected: FAIL
|
||||
|
||||
[createHTMLDocument]
|
||||
expected: FAIL
|
||||
|
||||
[<template>]
|
||||
expected: FAIL
|
||||
|
|
@ -1,11 +1,7 @@
|
|||
[form-submission-algorithm.html]
|
||||
expected: TIMEOUT
|
||||
[If form's firing submission events is true, then return; 'submit' event]
|
||||
expected: FAIL
|
||||
|
||||
[If form's firing submission events is true, then return; 'invalid' event]
|
||||
expected: FAIL
|
||||
|
||||
[Cannot navigate (after constructing the entry list)]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[script-onerror-insertion-point-2.html]
|
||||
expected: TIMEOUT
|
|
@ -0,0 +1,4 @@
|
|||
[iframe_005.html]
|
||||
[document.write external script into iframe write back into parent]
|
||||
expected: FAIL
|
||||
|
|
@ -20,6 +20,3 @@
|
|||
[domainLookupStart should be 0 in cross-origin request.]
|
||||
expected: FAIL
|
||||
|
||||
[responseEnd should be greater than 0 in cross-origin request.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -182,3 +182,9 @@
|
|||
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t9.4836157560348511e-1\t9.5236867666244507e-1\t4.0071010589599609e-3\t4.2075103446311962e-3\t3.8985999999999999e-3\n\t[31\]\t9.2646563053131104e-1\t9.3139332532882690e-1\t4.9276947975158691e-3\t5.2906700783754857e-3\t3.8985999999999999e-3\n\t[32\]\t9.0087991952896118e-1\t9.0675884485244751e-1\t5.8789253234863281e-3\t6.4834496590358351e-3\t3.8985999999999999e-3\n\t[33\]\t8.7170630693435669e-1\t8.7856203317642212e-1\t6.8557262420654297e-3\t7.8033490899654511e-3\t3.8985999999999999e-3\n\t[34\]\t8.3906102180480957e-1\t8.4691369533538818e-1\t7.8526735305786133e-3\t9.2721059699818163e-3\t3.8985999999999999e-3\n\t...and 31037 more errors.\n\tMax AbsError of 3.1372149685965721e+38 at index of 20238.\n\t[20238\]\t-3.1372149685965721e+38\t-4.7574958205223083e-1\t3.1372149685965721e+38\t6.5942569094094308e+38\t3.8985999999999999e-3\n\tMax RelError of 6.5942569094094308e+38 at index of 20238.\n\t[20238\]\t-3.1372149685965721e+38\t-4.7574958205223083e-1\t3.1372149685965721e+38\t6.5942569094094308e+38\t3.8985999999999999e-3\n]
|
||||
expected: FAIL
|
||||
|
||||
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t9.4836157560348511e-1\t9.5236867666244507e-1\t4.0071010589599609e-3\t4.2075103446311962e-3\t3.8985999999999999e-3\n\t[31\]\t9.2646563053131104e-1\t9.3139332532882690e-1\t4.9276947975158691e-3\t5.2906700783754857e-3\t3.8985999999999999e-3\n\t[32\]\t9.0087991952896118e-1\t9.0675884485244751e-1\t5.8789253234863281e-3\t6.4834496590358351e-3\t3.8985999999999999e-3\n\t[33\]\t8.7170630693435669e-1\t8.7856203317642212e-1\t6.8557262420654297e-3\t7.8033490899654511e-3\t3.8985999999999999e-3\n\t[34\]\t8.3906102180480957e-1\t8.4691369533538818e-1\t7.8526735305786133e-3\t9.2721059699818163e-3\t3.8985999999999999e-3\n\t...and 31037 more errors.\n\tMax AbsError of 9.8276454210290387e-1 at index of 39267.\n\t[39267\]\t9.0105115209404563e-14\t-9.8276454210281372e-1\t9.8276454210290387e-1\t1.0000000000000917e+0\t3.8985999999999999e-3\n\tMax RelError of 3.3137802965303198e+0 at index of 1253.\n\t[1253\]\t-4.3022233992815018e-2\t-9.9732093513011932e-3\t3.3049024641513824e-2\t3.3137802965303198e+0\t3.8985999999999999e-3\n]
|
||||
expected: FAIL
|
||||
|
||||
[X SNR (21.44058247864935 dB) is not greater than or equal to 65.737. Got 21.44058247864935.]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,6 +2,3 @@
|
|||
[test_invalid_always_match[None\]]
|
||||
expected: FAIL
|
||||
|
||||
[test_invalid_capabilites[value3\]]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[xrBoundedReferenceSpace_updates.https.html]
|
||||
expected: TIMEOUT
|
||||
expected: ERROR
|
||||
['XRBoundedReferenceSpace updates properly when the changes are applied]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[WorkerGlobalScope-close.html]
|
||||
[Test sending a message after closing.]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,148 @@
|
|||
// META: script=/resources/testdriver.js
|
||||
// META: script=/resources/testdriver-vendor.js
|
||||
// META: script=resources/helpers.js
|
||||
'use strict';
|
||||
|
||||
// Verifies that |func|, when invoked, throws a TypeError exception.
|
||||
async function expectTypeError(func) {
|
||||
try {
|
||||
await func();
|
||||
} catch (e) {
|
||||
assert_equals(e.name, 'TypeError');
|
||||
return;
|
||||
}
|
||||
|
||||
assert_unreached('expected a TypeError, but none was thrown');
|
||||
}
|
||||
|
||||
promise_test(async () => {
|
||||
try {
|
||||
await navigator.contacts.select(['name']);
|
||||
assert_unreached('expected a SecurityError, but none was thrown');
|
||||
} catch (e) {
|
||||
assert_equals(e.name, 'SecurityError');
|
||||
}
|
||||
}, 'The Contact API requires a user gesture')
|
||||
|
||||
contactsTestWithUserActivation(async (test, setSelectedContacts) => {
|
||||
// At least one property must be provided.
|
||||
await expectTypeError(() => navigator.contacts.select());
|
||||
await expectTypeError(() => navigator.contacts.select([]));
|
||||
|
||||
// Per WebIDL parsing, no invalid values may be provided.
|
||||
await expectTypeError(() =>
|
||||
navigator.contacts.select(['']));
|
||||
await expectTypeError(() =>
|
||||
navigator.contacts.select(['foo']));
|
||||
await expectTypeError(() =>
|
||||
navigator.contacts.select(['name', 'photo']));
|
||||
|
||||
}, 'The Contact API requires valid properties to be provided');
|
||||
|
||||
contactsTestWithUserActivation(async (test, setSelectedContacts) => {
|
||||
// Returns a NULL result, indicating that no results are available.
|
||||
setSelectedContacts(null);
|
||||
|
||||
await expectTypeError(() => navigator.contacts.select(['name']));
|
||||
|
||||
}, 'The Contact API can fail when the selector cannot be opened');
|
||||
|
||||
contactsTestWithUserActivation(async (test, setSelectedContacts) => {
|
||||
// Returns two contacts with all information available.
|
||||
setSelectedContacts([
|
||||
{ name: ['Dwight Schrute'], email: ['dwight@schrutefarmsbnb.com'], tel: ['000-0000'] },
|
||||
{ name: ['Michael Scott', 'Prison Mike'], email: ['michael@dundermifflin.com'], tel: [] },
|
||||
]);
|
||||
|
||||
let results = await navigator.contacts.select(['name', 'email', 'tel'], { multiple: true });
|
||||
assert_equals(results.length, 2);
|
||||
results = results.sort((c1, c2) => JSON.stringify(c1) < JSON.stringify(c2) ? -1 : 1);
|
||||
|
||||
{
|
||||
const dwight = results[0];
|
||||
|
||||
assert_own_property(dwight, 'name');
|
||||
assert_own_property(dwight, 'email');
|
||||
assert_own_property(dwight, 'tel');
|
||||
|
||||
assert_array_equals(dwight.name, ['Dwight Schrute']);
|
||||
assert_array_equals(dwight.email, ['dwight@schrutefarmsbnb.com']);
|
||||
assert_array_equals(dwight.tel, ['000-0000']);
|
||||
}
|
||||
|
||||
{
|
||||
const michael = results[1];
|
||||
|
||||
assert_own_property(michael, 'name');
|
||||
assert_own_property(michael, 'email');
|
||||
assert_own_property(michael, 'tel');
|
||||
|
||||
assert_array_equals(michael.name, ['Michael Scott', 'Prison Mike']);
|
||||
assert_array_equals(michael.email, ['michael@dundermifflin.com']);
|
||||
assert_array_equals(michael.tel, []);
|
||||
}
|
||||
}, 'The Contact API correctly returns ContactInfo entries');
|
||||
|
||||
contactsTestWithUserActivation(async (test, setSelectedContacts) => {
|
||||
// Returns two contacts with all information available.
|
||||
setSelectedContacts([
|
||||
{ name: ['Dwight Schrute'], email: ['dwight@schrutefarmsbnb.com'], tel: ['000-0000'] },
|
||||
{ name: ['Michael Scott', 'Prison Mike'], email: ['michael@dundermifflin.com'], tel: [] },
|
||||
]);
|
||||
|
||||
const results = await navigator.contacts.select(['name', 'email', 'tel']);
|
||||
assert_equals(results.length, 1);
|
||||
|
||||
}, 'Only one contact is returned if `multiple` is not set.');
|
||||
|
||||
contactsTestWithUserActivation(async (test, setSelectedContacts) => {
|
||||
// Returns partial information since no e-mail addresses are requested.
|
||||
setSelectedContacts([{ name: ['Creed'], email: ['creedthoughts@www.creedthoughts.gov.www'], tel: [] }]);
|
||||
|
||||
const results = await navigator.contacts.select(['name']);
|
||||
|
||||
assert_equals(results.length, 1);
|
||||
|
||||
{
|
||||
const creed = results[0];
|
||||
|
||||
assert_array_equals(creed.name, ['Creed']);
|
||||
assert_equals(creed.email, undefined);
|
||||
assert_equals(creed.tel, undefined);
|
||||
}
|
||||
}, 'The Contact API does not include fields that were not requested');
|
||||
|
||||
contactsTestWithUserActivation(async (test, setSelectedContacts) => {
|
||||
// Returns partial information since no e-mail addresses are requested.
|
||||
setSelectedContacts([{ name: ['Kelly'], email: [], tel: [] }]);
|
||||
|
||||
// First request should work.
|
||||
const promise1 = new Promise((resolve, reject) => {
|
||||
navigator.contacts.select(['name']).then(resolve)
|
||||
.catch(e => reject(e.message));
|
||||
});
|
||||
|
||||
// Second request should fail (since the first one didn't complete yet).
|
||||
const promise2 = new Promise((resolve, reject) => {
|
||||
navigator.contacts.select(['name']).then(contacts => reject('This was supposed to fail'))
|
||||
.catch(e => resolve(e.name));
|
||||
});
|
||||
|
||||
const results = await Promise.all([promise1, promise2]);
|
||||
const contacts = results[0];
|
||||
assert_equals(contacts.length, 1);
|
||||
const contact = contacts[0];
|
||||
assert_equals(contact.name[0], 'Kelly');
|
||||
assert_equals(results[1], 'InvalidStateError');
|
||||
|
||||
}, 'The Contact API cannot be used again until the first operation is complete.');
|
||||
|
||||
contactsTestWithUserActivation(async (test, setSelectedContacts) => {
|
||||
const iframe = document.createElement('iframe');
|
||||
document.body.appendChild(iframe);
|
||||
iframe.src = 'resources/non-main-frame-select.html';
|
||||
await new Promise(resolve => window.addEventListener('message', event => resolve(event.data)))
|
||||
.then(data => assert_equals(data.errorMsg, 'InvalidStateError'))
|
||||
.finally(() => iframe.remove())
|
||||
|
||||
}, 'Test contacts.select() throws an InvalidStateError in a sub-frame');
|
64
tests/wpt/web-platform-tests/contacts/resources/helpers.js
Normal file
64
tests/wpt/web-platform-tests/contacts/resources/helpers.js
Normal file
|
@ -0,0 +1,64 @@
|
|||
'use strict';
|
||||
|
||||
// These tests rely on the User Agent providing an implementation of
|
||||
// platform contacts backends.
|
||||
//
|
||||
// In Chromium-based browsers this implementation is provided by a polyfill
|
||||
// in order to reduce the amount of test-only code shipped to users. To enable
|
||||
// these tests the browser must be run with these options:
|
||||
//
|
||||
// --enable-blink-features=MojoJS,MojoJSTest
|
||||
const loadChromiumResources = async () => {
|
||||
if (!window.MojoInterfaceInterceptor) {
|
||||
// Do nothing on non-Chromium-based browsers or when the Mojo bindings are
|
||||
// not present in the global namespace.
|
||||
return;
|
||||
}
|
||||
|
||||
const resources = [
|
||||
'/gen/layout_test_data/mojo/public/js/mojo_bindings.js',
|
||||
'/gen/third_party/blink/public/mojom/contacts/contacts_manager.mojom.js',
|
||||
'/resources/chromium/contacts_manager_mock.js',
|
||||
];
|
||||
|
||||
await Promise.all(resources.map(path => {
|
||||
const script = document.createElement('script');
|
||||
script.src = path;
|
||||
script.async = false;
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
script.onload = resolve;
|
||||
script.onerror = reject;
|
||||
});
|
||||
document.head.appendChild(script);
|
||||
return promise;
|
||||
}));
|
||||
};
|
||||
|
||||
// User Agents must provide their own implementation of `WebContacts`,
|
||||
// which must contain the following this interface:
|
||||
// class WebContactsTest {
|
||||
// /** @param {?Array<!ContactInfo>} contacts */
|
||||
// setSelectedContacts(contacts);
|
||||
// }
|
||||
async function createWebContactsTest() {
|
||||
if (typeof WebContactsTest === 'undefined') {
|
||||
await loadChromiumResources();
|
||||
}
|
||||
assert_true(
|
||||
typeof WebContactsTest !== 'undefined',
|
||||
'Mojo testing interface is not available.'
|
||||
);
|
||||
return new WebContactsTest();
|
||||
}
|
||||
|
||||
// Creates a Promise test for |func| given the |description|. The |func| will
|
||||
// be executed with `setSelectedContacts` which will allow tests to mock out
|
||||
// the result of calling navigator.contacts.select. `setSelectedContacts`
|
||||
// accepts a nullable Array of ContactInfos.
|
||||
function contactsTestWithUserActivation(func, description) {
|
||||
promise_test(async test => {
|
||||
const webContactsTest = await createWebContactsTest();
|
||||
await window.test_driver.bless('request contacts');
|
||||
return func(test, contacts => webContactsTest.setSelectedContacts(contacts));
|
||||
}, description);
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
<script>
|
||||
'use strict';
|
||||
|
||||
window.onload = function() {
|
||||
navigator.contacts.select(['name', 'email'], { multiple: true })
|
||||
.then(results => parent.postMessage({ errorMsg: '' }, '*'))
|
||||
.catch(exception => parent.postMessage({ errorMsg: exception.name }, '*'));
|
||||
}
|
||||
</script>
|
|
@ -11,11 +11,11 @@
|
|||
(async () => {
|
||||
const scope = 'does/not/exist';
|
||||
|
||||
let registration = await navigator.serviceWorker.getRegistration(scope);
|
||||
if (registration)
|
||||
await registration.unregister();
|
||||
registration = await navigator.serviceWorker.register(
|
||||
const registration = await navigator.serviceWorker.register(
|
||||
'serviceworker_cookieStore_arguments.js', {scope});
|
||||
add_completion_callback(() => {
|
||||
registration.unregister();
|
||||
});
|
||||
|
||||
fetch_tests_from_worker(registration.installing);
|
||||
})();
|
||||
|
|
|
@ -11,11 +11,11 @@
|
|||
(async () => {
|
||||
const scope = 'does/not/exist';
|
||||
|
||||
let registration = await navigator.serviceWorker.getRegistration(scope);
|
||||
if (registration)
|
||||
await registration.unregister();
|
||||
registration = await navigator.serviceWorker.register(
|
||||
const registration = await navigator.serviceWorker.register(
|
||||
'serviceworker_cookieStore_basic.js', {scope});
|
||||
add_completion_callback(() => {
|
||||
registration.unregister();
|
||||
});
|
||||
|
||||
fetch_tests_from_worker(registration.installing);
|
||||
})();
|
||||
|
|
|
@ -12,11 +12,11 @@
|
|||
// Not using an explicit scope here in order for script URL to be in scope,
|
||||
// to cover implicit subscription URL construction.
|
||||
|
||||
let registration = await navigator.serviceWorker.getRegistration();
|
||||
if (registration)
|
||||
await registration.unregister();
|
||||
registration = await navigator.serviceWorker.register(
|
||||
const registration = await navigator.serviceWorker.register(
|
||||
'serviceworker_cookieStore_subscriptions.js');
|
||||
add_completion_callback(() => {
|
||||
registration.unregister();
|
||||
});
|
||||
|
||||
fetch_tests_from_worker(registration.installing);
|
||||
})();
|
||||
|
|
|
@ -11,11 +11,11 @@
|
|||
(async () => {
|
||||
const scope = 'scope';
|
||||
|
||||
let registration = await navigator.serviceWorker.getRegistration(scope);
|
||||
if (registration)
|
||||
await registration.unregister();
|
||||
registration = await navigator.serviceWorker.register(
|
||||
const registration = await navigator.serviceWorker.register(
|
||||
'serviceworker_cookieStore_subscriptions_basic.js', {scope});
|
||||
add_completion_callback(() => {
|
||||
registration.unregister();
|
||||
});
|
||||
|
||||
fetch_tests_from_worker(registration.installing);
|
||||
})();
|
||||
|
|
|
@ -10,11 +10,11 @@
|
|||
(async () => {
|
||||
const scope = 'scope';
|
||||
|
||||
let registration = await navigator.serviceWorker.getRegistration(scope);
|
||||
if (registration)
|
||||
await registration.unregister();
|
||||
registration = await navigator.serviceWorker.register(
|
||||
const registration = await navigator.serviceWorker.register(
|
||||
'serviceworker_cookieStore_subscriptions_empty.js', {scope});
|
||||
add_completion_callback(() => {
|
||||
registration.unregister();
|
||||
});
|
||||
|
||||
fetch_tests_from_worker(registration.installing);
|
||||
})();
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<script>
|
||||
assert_not_inherited('alignment-baseline', 'baseline', 'central');
|
||||
assert_not_inherited('baseline-shift', '0px', '10px');
|
||||
assert_inherited('dominant-baseline', 'normal', 'central');
|
||||
assert_inherited('dominant-baseline', 'auto', 'central');
|
||||
assert_not_inherited('initial-letters', 'normal', '2 3');
|
||||
assert_inherited('initial-letters-align', 'alphabetic', 'hanging');
|
||||
assert_inherited('initial-letters-wrap', 'none', 'grid');
|
||||
|
|
|
@ -25,8 +25,6 @@ assert_not_inherited('max-height', 'none', '10px');
|
|||
assert_not_inherited('max-width', 'none', '10px');
|
||||
assert_not_inherited('min-height', 'auto', '10px');
|
||||
assert_not_inherited('min-width', 'auto', '10px');
|
||||
|
||||
// height, width not yet tested.
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Inheritance of CSS Intrinsic & Extrinsic Sizing properties</title>
|
||||
<link rel="help" href="https://drafts.csswg.org/css-sizing-3/#property-index">
|
||||
<meta name="assert" content="Properties do not inherit.">
|
||||
<meta name="assert" content="Properties have initial values according to the spec.">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/css/support/inheritance-testcommon.js"></script>
|
||||
<style>
|
||||
#target {
|
||||
position: absolute;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<div id="target"></div>
|
||||
</div>
|
||||
<script>
|
||||
// Without position absolute, the initial value
|
||||
// 'auto' gives the size of the parent element.
|
||||
assert_not_inherited('height', '0px', '10px');
|
||||
assert_not_inherited('width', '0px', '10px');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>backdrop-filter: Forms a containing block for fixed/absolute</title>
|
||||
<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org">
|
||||
|
||||
|
||||
|
||||
<p>Expected: one green square and one red square, both 200px by 200px.</p>
|
||||
<div class="container">
|
||||
<div class="fixed-child"></div>
|
||||
<div class="absolute-child"></div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.container {
|
||||
width: 200px;
|
||||
will-change: transform;
|
||||
}
|
||||
|
||||
.fixed-child {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
background-color: green;
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.absolute-child {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 210px;
|
||||
background-color: red;
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>backdrop-filter: Forms a containing block for fixed/absolute</title>
|
||||
<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org">
|
||||
<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty">
|
||||
<link rel="match" href="backdrop-filter-containing-block-ref.html">
|
||||
|
||||
<p>Expected: one green square and one red square, both 200px by 200px.</p>
|
||||
<div class="container">
|
||||
<div class="fixed-child"></div>
|
||||
<div class="absolute-child"></div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.container {
|
||||
width: 200px;
|
||||
backdrop-filter: invert(1);
|
||||
}
|
||||
|
||||
.fixed-child {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
background-color: green;
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.absolute-child {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 210px;
|
||||
background-color: red;
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
<!DOCTYPE HTML>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
class TestElement extends HTMLElement {
|
||||
constructor() {
|
||||
super();
|
||||
this._internals = this.attachInternals();
|
||||
}
|
||||
|
||||
get internals() {
|
||||
return this._internals;
|
||||
}
|
||||
|
||||
set internals(val) {
|
||||
throw "Can't set internals!";
|
||||
}
|
||||
}
|
||||
customElements.define("test-element", TestElement);
|
||||
</script>
|
||||
|
||||
<test-element id= "testElement"></test-element>
|
||||
|
||||
<script>
|
||||
const element = document.getElementById("testElement");
|
||||
const properties = [
|
||||
"role",
|
||||
"ariaActiveDescendant",
|
||||
"ariaAtomic",
|
||||
"ariaAutoComplete",
|
||||
"ariaBusy",
|
||||
"ariaChecked",
|
||||
"ariaColCount",
|
||||
"ariaColIndex",
|
||||
"ariaColSpan",
|
||||
"ariaControls",
|
||||
"ariaCurrent",
|
||||
"ariaDescribedBy",
|
||||
"ariaDetails",
|
||||
"ariaDisabled",
|
||||
"ariaErrorMessage",
|
||||
"ariaExpanded",
|
||||
"ariaFlowTo",
|
||||
"ariaHasPopup",
|
||||
"ariaHidden",
|
||||
"ariaKeyShortcuts",
|
||||
"ariaLabel",
|
||||
"ariaLabelledBy",
|
||||
"ariaLevel",
|
||||
"ariaLive",
|
||||
"ariaModal",
|
||||
"ariaMultiLine",
|
||||
"ariaMultiSelectable",
|
||||
"ariaOrientation",
|
||||
"ariaOwns",
|
||||
"ariaPlaceholder",
|
||||
"ariaPosInSet",
|
||||
"ariaPressed",
|
||||
"ariaReadOnly",
|
||||
"ariaRelevant",
|
||||
"ariaRequired",
|
||||
"ariaRoleDescription",
|
||||
"ariaRowCount",
|
||||
"ariaRowIndex",
|
||||
"ariaRowSpan",
|
||||
"ariaSelected",
|
||||
"ariaSort",
|
||||
"ariaValueMax",
|
||||
"ariaValueMin",
|
||||
"ariaValueNow",
|
||||
"ariaValueText"
|
||||
];
|
||||
for (const property of properties) {
|
||||
test(() => {
|
||||
assert_inherits(element.internals, property);
|
||||
}, property + " is defined in ElementInternals");
|
||||
}
|
||||
</script>
|
|
@ -0,0 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<script>
|
||||
// When told, register an unload handler that will trigger a beacon to the
|
||||
// URL given by the sender of the message.
|
||||
window.addEventListener('message', e => {
|
||||
var url = e.data;
|
||||
window.addEventListener('unload', () => {
|
||||
navigator.sendBeacon(url, 'blah');
|
||||
});
|
||||
window.parent.postMessage('navigate-away', '*');
|
||||
});
|
||||
</script>
|
|
@ -0,0 +1,64 @@
|
|||
<!DOCTYPE html>
|
||||
<script src=/resources/testharness.js></script>
|
||||
<script src=/resources/testharnessreport.js></script>
|
||||
<script src=/resources/testdriver.js></script>
|
||||
<script src=/resources/testdriver-vendor.js></script>
|
||||
<script src=/fetch/sec-metadata/resources/helper.js></script>
|
||||
<script src=/common/utils.js></script>
|
||||
<body>
|
||||
<script>
|
||||
// The test
|
||||
// 1. Creates a same-origin iframe
|
||||
// 2. Adds to the iframe an unload handler that will
|
||||
// trigger a request to <unload_request_url>/.../record-header.py...
|
||||
// 3. Navigate the iframe to a cross-origin url (to data: url)
|
||||
// 4. Waits until the request goes through
|
||||
// 5. Verifies Sec-Fetch-Site request header of the request.
|
||||
//
|
||||
// This is a regression test for https://crbug.com/986577.
|
||||
function create_test(unload_request_origin, expectations) {
|
||||
async_test(t => {
|
||||
// STEP 1: Create an iframe.
|
||||
let nonce = token();
|
||||
let key = "unload-test-" + nonce;
|
||||
let url = unload_request_origin +
|
||||
"/fetch/sec-metadata/resources/record-header.py?file=" + key;
|
||||
let i = document.createElement('iframe');
|
||||
i.src = 'resources/unload-with-beacon.html';
|
||||
i.onload = () => {
|
||||
// STEP 2: Ask the iframe to add an unload handler.
|
||||
i.contentWindow.postMessage(url, '*');
|
||||
};
|
||||
window.addEventListener('message', e => {
|
||||
// STEP 3: Navigate the iframe away
|
||||
i.contentWindow.location = 'data:text/html,DONE';
|
||||
});
|
||||
document.body.appendChild(i);
|
||||
|
||||
// STEPS 4 and 5: Wait for the beacon to go through and verify
|
||||
// the request headers.
|
||||
function wait_and_verify() {
|
||||
t.step_timeout(() => {
|
||||
fetch("resources/record-header.py?retrieve=true&file=" + key)
|
||||
.then(response => response.text())
|
||||
.then(text => t.step(() => {
|
||||
if (text == 'No header has been recorded') {
|
||||
wait_and_verify();
|
||||
return;
|
||||
}
|
||||
assert_header_equals(text, expectations);
|
||||
t.done();
|
||||
}))
|
||||
}, 200);
|
||||
}
|
||||
wait_and_verify();
|
||||
}, "Fetch from an unload handler");
|
||||
}
|
||||
|
||||
create_test("https://{{host}}:{{ports[https][0]}}", {
|
||||
"dest": "empty",
|
||||
"site": "same-origin",
|
||||
"user": "",
|
||||
"mode": "no-cors"
|
||||
});
|
||||
</script>
|
|
@ -3,7 +3,7 @@
|
|||
// (https://github.com/tidoust/reffy-reports)
|
||||
// Source: Accelerometer (https://w3c.github.io/accelerometer/)
|
||||
|
||||
[Constructor(optional AccelerometerSensorOptions options), SecureContext,
|
||||
[Constructor(optional AccelerometerSensorOptions options = {}), SecureContext,
|
||||
Exposed=Window]
|
||||
interface Accelerometer : Sensor {
|
||||
readonly attribute double? x;
|
||||
|
@ -17,12 +17,12 @@ dictionary AccelerometerSensorOptions : SensorOptions {
|
|||
AccelerometerLocalCoordinateSystem referenceFrame = "device";
|
||||
};
|
||||
|
||||
[Constructor(optional AccelerometerSensorOptions options), SecureContext,
|
||||
[Constructor(optional AccelerometerSensorOptions options = {}), SecureContext,
|
||||
Exposed=Window]
|
||||
interface LinearAccelerationSensor : Accelerometer {
|
||||
};
|
||||
|
||||
[Constructor(optional AccelerometerSensorOptions options), SecureContext,
|
||||
[Constructor(optional AccelerometerSensorOptions options = {}), SecureContext,
|
||||
Exposed=Window]
|
||||
interface GravitySensor : Accelerometer {
|
||||
};
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
// (https://github.com/tidoust/reffy-reports)
|
||||
// Source: Ambient Light Sensor (https://w3c.github.io/ambient-light/)
|
||||
|
||||
[Constructor(optional SensorOptions sensorOptions), SecureContext, Exposed=Window]
|
||||
[Constructor(optional SensorOptions sensorOptions = {}), SecureContext, Exposed=Window]
|
||||
interface AmbientLightSensor : Sensor {
|
||||
readonly attribute double? illuminance;
|
||||
};
|
||||
|
|
|
@ -15,6 +15,13 @@ interface AnimationWorkletGlobalScope : WorkletGlobalScope {
|
|||
|
||||
callback AnimatorInstanceConstructor = any (any options, optional any state);
|
||||
|
||||
[ Exposed=AnimationWorklet ]
|
||||
interface WorkletAnimationEffect {
|
||||
EffectTiming getTiming();
|
||||
ComputedEffectTiming getComputedTiming();
|
||||
attribute double? localTime;
|
||||
};
|
||||
|
||||
[Exposed=Window,
|
||||
Constructor (DOMString animatorName,
|
||||
optional (AnimationEffect or sequence<AnimationEffect>)? effects = null,
|
||||
|
@ -26,11 +33,5 @@ interface WorkletAnimation : Animation {
|
|||
|
||||
[Exposed=AnimationWorklet]
|
||||
interface WorkletGroupEffect {
|
||||
sequence<AnimationEffect> getChildren();
|
||||
};
|
||||
|
||||
[Exposed=AnimationWorklet]
|
||||
partial interface AnimationEffect {
|
||||
// Intended for use inside Animation Worklet scope to drive the effect.
|
||||
attribute double localTime;
|
||||
sequence<WorkletAnimationEffect> getChildren();
|
||||
};
|
||||
|
|
|
@ -12,10 +12,10 @@ namespace console { // but see namespace object requirements below
|
|||
void error(any... data);
|
||||
void info(any... data);
|
||||
void log(any... data);
|
||||
void table(any tabularData, optional sequence<DOMString> properties);
|
||||
void table(optional any tabularData, optional sequence<DOMString> properties);
|
||||
void trace(any... data);
|
||||
void warn(any... data);
|
||||
void dir(any item, optional object? options);
|
||||
void dir(optional any item, optional object? options);
|
||||
void dirxml(any... data);
|
||||
|
||||
// Counting
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
// (https://github.com/tidoust/reffy-reports)
|
||||
// Source: DOM Standard (https://dom.spec.whatwg.org/)
|
||||
|
||||
[Constructor(DOMString type, optional EventInit eventInitDict),
|
||||
[Constructor(DOMString type, optional EventInit eventInitDict = {}),
|
||||
Exposed=(Window,Worker,AudioWorklet)]
|
||||
interface Event {
|
||||
readonly attribute DOMString type;
|
||||
|
@ -45,7 +45,7 @@ partial interface Window {
|
|||
[Replaceable] readonly attribute any event; // historical
|
||||
};
|
||||
|
||||
[Constructor(DOMString type, optional CustomEventInit eventInitDict),
|
||||
[Constructor(DOMString type, optional CustomEventInit eventInitDict = {}),
|
||||
Exposed=(Window,Worker)]
|
||||
interface CustomEvent : Event {
|
||||
readonly attribute any detail;
|
||||
|
@ -60,8 +60,8 @@ dictionary CustomEventInit : EventInit {
|
|||
[Constructor,
|
||||
Exposed=(Window,Worker,AudioWorklet)]
|
||||
interface EventTarget {
|
||||
void addEventListener(DOMString type, EventListener? callback, optional (AddEventListenerOptions or boolean) options);
|
||||
void removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options);
|
||||
void addEventListener(DOMString type, EventListener? callback, optional (AddEventListenerOptions or boolean) options = {});
|
||||
void removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options = {});
|
||||
boolean dispatchEvent(Event event);
|
||||
};
|
||||
|
||||
|
@ -158,7 +158,7 @@ interface HTMLCollection {
|
|||
[Constructor(MutationCallback callback),
|
||||
Exposed=Window]
|
||||
interface MutationObserver {
|
||||
void observe(Node target, optional MutationObserverInit options);
|
||||
void observe(Node target, optional MutationObserverInit options = {});
|
||||
void disconnect();
|
||||
sequence<MutationRecord> takeRecords();
|
||||
};
|
||||
|
@ -209,7 +209,7 @@ interface Node : EventTarget {
|
|||
|
||||
readonly attribute boolean isConnected;
|
||||
readonly attribute Document? ownerDocument;
|
||||
Node getRootNode(optional GetRootNodeOptions options);
|
||||
Node getRootNode(optional GetRootNodeOptions options = {});
|
||||
readonly attribute Node? parentNode;
|
||||
readonly attribute Element? parentElement;
|
||||
boolean hasChildNodes();
|
||||
|
@ -269,8 +269,8 @@ interface Document : Node {
|
|||
HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
|
||||
HTMLCollection getElementsByClassName(DOMString classNames);
|
||||
|
||||
[CEReactions, NewObject] Element createElement(DOMString localName, optional (DOMString or ElementCreationOptions) options);
|
||||
[CEReactions, NewObject] Element createElementNS(DOMString? namespace, DOMString qualifiedName, optional (DOMString or ElementCreationOptions) options);
|
||||
[CEReactions, NewObject] Element createElement(DOMString localName, optional (DOMString or ElementCreationOptions) options = {});
|
||||
[CEReactions, NewObject] Element createElementNS(DOMString? namespace, DOMString qualifiedName, optional (DOMString or ElementCreationOptions) options = {});
|
||||
[NewObject] DocumentFragment createDocumentFragment();
|
||||
[NewObject] Text createTextNode(DOMString data);
|
||||
[NewObject] CDATASection createCDATASection(DOMString data);
|
||||
|
@ -359,7 +359,7 @@ interface Element : Node {
|
|||
[CEReactions] Attr? setAttributeNodeNS(Attr attr);
|
||||
[CEReactions] Attr removeAttributeNode(Attr attr);
|
||||
|
||||
ShadowRoot attachShadow(ShadowRootInit init);
|
||||
ShadowRoot attachShadow(optional ShadowRootInit init = {});
|
||||
readonly attribute ShadowRoot? shadowRoot;
|
||||
|
||||
Element? closest(DOMString selectors);
|
||||
|
|
|
@ -18,10 +18,10 @@ dictionary TextDecodeOptions {
|
|||
boolean stream = false;
|
||||
};
|
||||
|
||||
[Constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options),
|
||||
[Constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options = {}),
|
||||
Exposed=(Window,Worker)]
|
||||
interface TextDecoder {
|
||||
USVString decode(optional BufferSource input, optional TextDecodeOptions options);
|
||||
USVString decode(optional BufferSource input, optional TextDecodeOptions options = {});
|
||||
};
|
||||
TextDecoder includes TextDecoderCommon;
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ dictionary NDEFMessageInit {
|
|||
sequence<NDEFRecordInit> records;
|
||||
};
|
||||
|
||||
typedef (DOMString or unrestricted double or ArrayBuffer or object) NDEFRecordData;
|
||||
typedef any NDEFRecordData;
|
||||
|
||||
[Constructor(NDEFRecordInit recordInit), Exposed=Window]
|
||||
interface NDEFRecord {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// GENERATED CONTENT - DO NOT EDIT
|
||||
// Content was automatically extracted by Reffy into reffy-reports
|
||||
// (https://github.com/tidoust/reffy-reports)
|
||||
// Source: Web Share API - Level 1 (https://wicg.github.io/web-share/)
|
||||
// Source: Web Share API - Level 1 (https://w3c.github.io/web-share/)
|
||||
|
||||
partial interface Navigator {
|
||||
[SecureContext] Promise<void> share(optional ShareData data = {});
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
// Copyright 2018 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
'use strict';
|
||||
|
||||
const WebContactsTest = (() => {
|
||||
class MockContacts {
|
||||
constructor() {
|
||||
this.bindingSet_ = new mojo.BindingSet(blink.mojom.ContactsManager);
|
||||
|
||||
this.interceptor_ = new MojoInterfaceInterceptor(
|
||||
blink.mojom.ContactsManager.name);
|
||||
this.interceptor_.oninterfacerequest =
|
||||
e => this.bindingSet_.addBinding(this, e.handle);
|
||||
this.interceptor_.start();
|
||||
|
||||
this.selectedContacts_ = [];
|
||||
}
|
||||
|
||||
async select(multiple, includeNames, includeEmails, includeTel) {
|
||||
if (this.selectedContacts_ === null)
|
||||
return {contacts: null};
|
||||
|
||||
const contactInfos = this.selectedContacts_.map(contact => {
|
||||
const contactInfo = new blink.mojom.ContactInfo();
|
||||
if (includeNames)
|
||||
contactInfo.name = contact.name;
|
||||
if (includeEmails)
|
||||
contactInfo.email = contact.email;
|
||||
if (includeTel)
|
||||
contactInfo.tel = contact.tel;
|
||||
return contactInfo;
|
||||
});
|
||||
|
||||
if (!contactInfos.length) return {contacts: []};
|
||||
if (!multiple) return {contacts: [contactInfos[0]]};
|
||||
return {contacts: contactInfos};
|
||||
}
|
||||
|
||||
setSelectedContacts(contacts) {
|
||||
this.selectedContacts_ = contacts;
|
||||
}
|
||||
|
||||
reset() {
|
||||
this.bindingSet_.closeAllBindings();
|
||||
this.interceptor_.stop();
|
||||
}
|
||||
}
|
||||
|
||||
const mockContacts = new MockContacts();
|
||||
|
||||
class ContactsTestChromium {
|
||||
constructor() {
|
||||
Object.freeze(this); // Make it immutable.
|
||||
}
|
||||
|
||||
setSelectedContacts(contacts) {
|
||||
mockContacts.setSelectedContacts(contacts);
|
||||
}
|
||||
}
|
||||
|
||||
return ContactsTestChromium;
|
||||
})();
|
|
@ -0,0 +1,14 @@
|
|||
// META: title=fetch method on the right interface
|
||||
// META: global=!default,serviceworker
|
||||
|
||||
test(function() {
|
||||
assert_false(self.hasOwnProperty('fetch'), 'ServiceWorkerGlobalScope ' +
|
||||
'instance should not have "fetch" method as its property.');
|
||||
assert_inherits(self, 'fetch', 'ServiceWorkerGlobalScope should ' +
|
||||
'inherit "fetch" method.');
|
||||
assert_own_property(self.__proto__.__proto__, 'fetch',
|
||||
'WorkerGlobalScope should have "fetch" propery in its prototype.');
|
||||
assert_equals(self.fetch, self.__proto__.__proto__.fetch,
|
||||
'ServiceWorkerGlobalScope.fetch should be the same as ' +
|
||||
'WorkerGlobalScope.fetch.');
|
||||
}, 'Fetch method on the right interface');
|
|
@ -0,0 +1,15 @@
|
|||
<html>
|
||||
<svg>
|
||||
<foreignObject style="overflow: visible;"
|
||||
width="400" height="400" filter="url(#blur)">
|
||||
<div id=target>test</div>
|
||||
</foreignObject>
|
||||
<g>
|
||||
<defs>
|
||||
<filter id="blur">
|
||||
<feGaussianBlur stdDeviation="0.1"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</g>
|
||||
</svg>
|
||||
</html>
|
|
@ -0,0 +1,24 @@
|
|||
<!doctype HTML>
|
||||
<title>Test that re-painting a foreignObject element with a filter works.</title>
|
||||
<link rel="match" href="filter-repaint-ref.html">
|
||||
<link rel="author" title="Chris Harrelson" href="mailto:chrishtr@chromium.org">
|
||||
<link rel="help" href="https://svgwg.org/svg2-draft/single-page.html#embedded-ForeignObjectElement"/>
|
||||
<svg>
|
||||
<foreignObject style="overflow: visible;"
|
||||
width="400" height="400" filter="url(#blur)">
|
||||
<div id=target>test</div>
|
||||
</foreignObject>
|
||||
<g>
|
||||
<defs>
|
||||
<filter id="blur">
|
||||
<feGaussianBlur stdDeviation="0.1"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</g>
|
||||
</svg>
|
||||
<script>
|
||||
onload = () => {
|
||||
requestAnimationFrame(() => requestAnimationFrame(() =>
|
||||
target.style.width = '11px'));
|
||||
}
|
||||
</script>
|
|
@ -1,8 +1,8 @@
|
|||
marionette_driver==2.8.0
|
||||
mozprofile==2.2.0
|
||||
mozprofile==2.3.0
|
||||
mozprocess==1.0.0
|
||||
mozcrash==1.1.0
|
||||
mozrunner==7.4.0
|
||||
mozrunner==7.5.1
|
||||
mozleak==0.2
|
||||
mozinstall==2.0.0
|
||||
mozdownload==1.26.0
|
||||
|
|
|
@ -125,6 +125,8 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
|
|||
options["prefs"] = {
|
||||
"network.dns.localDomains": ",".join(server_config.domains_set)
|
||||
}
|
||||
for pref, value in kwargs["extra_prefs"]:
|
||||
options["prefs"].update({pref: Preferences.cast(value)})
|
||||
capabilities["moz:firefoxOptions"] = options
|
||||
if kwargs["certutil_binary"] is None:
|
||||
capabilities["acceptInsecureCerts"] = True
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
spec: https://wicg.github.io/web-share/
|
||||
spec: https://w3c.github.io/web-share/
|
||||
suggested_reviewers:
|
||||
- ewilligers
|
||||
- mgiuca
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// META: script=/resources/WebIDLParser.js
|
||||
// META: script=/resources/idlharness.js
|
||||
|
||||
// https://wicg.github.io/web-share/
|
||||
// https://w3c.github.io/web-share/
|
||||
|
||||
'use strict';
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ import pytest
|
|||
from webdriver import error
|
||||
|
||||
from tests.support.asserts import assert_success
|
||||
from tests.support.inline import inline
|
||||
|
||||
|
||||
def switch_to_window(session, handle):
|
||||
|
@ -19,13 +18,15 @@ def test_retain_tab_modal_status(session, create_window):
|
|||
response = switch_to_window(session, new_handle)
|
||||
assert_success(response)
|
||||
|
||||
session.url = inline("<script>window.alert('Hello');</script>")
|
||||
session.execute_script("window.alert('Hello');")
|
||||
assert session.alert.text == "Hello"
|
||||
|
||||
response = switch_to_window(session, handle)
|
||||
assert_success(response)
|
||||
|
||||
with pytest.raises(error.NoSuchAlertException):
|
||||
session.alert.text == "Hello"
|
||||
|
||||
response = switch_to_window(session, new_handle)
|
||||
assert_success(response)
|
||||
|
||||
|
|
|
@ -77,6 +77,8 @@ let testFunction = function(session, fakeDeviceController, t) {
|
|||
"Expect to have a gamepad, iteration: " + inputChangeEvents);
|
||||
assert_equals(cached_input_source.gamepad.index, -1,
|
||||
"WebXR Gamepad.index must be -1, iteration: " + inputChangeEvents);
|
||||
assert_equals(cached_input_source.gamepad.id, "",
|
||||
"WebXR Gamepad.id must be empty string, iteration: " + inputChangeEvents);
|
||||
assert_true(cached_input_source.gamepad.connected,
|
||||
"Expect the gamepad to be connected, iteration: " + inputChangeEvents);
|
||||
}
|
||||
|
@ -88,6 +90,8 @@ let testFunction = function(session, fakeDeviceController, t) {
|
|||
"Expect to have a gamepad on cached_input_source, iteration: " + inputChangeEvents);
|
||||
assert_equals(cached_input_source.gamepad.index, -1,
|
||||
"WebXR Gamepad.index must be -1, iteration: " + inputChangeEvents);
|
||||
assert_equals(cached_input_source.gamepad.id, "",
|
||||
"WebXR Gamepad.id must be empty string, iteration: " + inputChangeEvents);
|
||||
assert_false(cached_input_source.gamepad.connected,
|
||||
"Expect cached gamepad to be disconnected, iteration: " + inputChangeEvents);
|
||||
}
|
||||
|
|
|
@ -52,7 +52,11 @@ let testFunction = function(session, fakeDeviceController, t) {
|
|||
function assertSameObjects() {
|
||||
assert_equals(session.inputSources[0], cached_input_source);
|
||||
assert_equals(cached_input_source.gamepad, cached_gamepad);
|
||||
|
||||
// Also make sure that WebXR gamepads have the index and id values required
|
||||
// by the spec.
|
||||
assert_equals(cached_gamepad.index, -1);
|
||||
assert_equals(cached_gamepad.id, "");
|
||||
}
|
||||
|
||||
// Input events and gamepad state changes (button presses, axis movements)
|
||||
|
@ -74,6 +78,7 @@ let testFunction = function(session, fakeDeviceController, t) {
|
|||
cached_gamepad = cached_input_source.gamepad;
|
||||
t.step(() => {
|
||||
assert_equals(cached_gamepad.index, -1);
|
||||
assert_equals(cached_gamepad.id, "");
|
||||
assert_equals(cached_gamepad.buttons.length, 3);
|
||||
assert_equals(cached_gamepad.axes.length, 2);
|
||||
// Initially, the button should not be pressed and the axes values should
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue