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:
bors-servo 2019-08-10 17:04:28 -04:00 committed by GitHub
commit 59f9a3d370
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
55 changed files with 895 additions and 104 deletions

View file

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

View file

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

View file

@ -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": [

View file

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

View file

@ -0,0 +1,2 @@
[backdrop-filter-containing-block.html]
expected: FAIL

View file

@ -0,0 +1,4 @@
[ElementInternals-accessibility.html]
[ElementInternals-accessibility]
expected: FAIL

View file

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

View file

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

View file

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

View file

@ -0,0 +1,4 @@
[traverse_the_history_2.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -0,0 +1,4 @@
[creating_browsing_context_test_01.html]
[first argument: absolute url]
expected: FAIL

View file

@ -0,0 +1,10 @@
[non-active-document.html]
[DOMParser]
expected: FAIL
[createHTMLDocument]
expected: FAIL
[<template>]
expected: FAIL

View file

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

View file

@ -0,0 +1,2 @@
[script-onerror-insertion-point-2.html]
expected: TIMEOUT

View file

@ -0,0 +1,4 @@
[iframe_005.html]
[document.write external script into iframe write back into parent]
expected: FAIL

View file

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

View file

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

View file

@ -2,6 +2,3 @@
[test_invalid_always_match[None\]]
expected: FAIL
[test_invalid_capabilites[value3\]]
expected: FAIL

View file

@ -1,5 +1,5 @@
[xrBoundedReferenceSpace_updates.https.html]
expected: TIMEOUT
expected: ERROR
['XRBoundedReferenceSpace updates properly when the changes are applied]
expected: TIMEOUT

View file

@ -0,0 +1,4 @@
[WorkerGlobalScope-close.html]
[Test sending a message after closing.]
expected: FAIL

View file

@ -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');

View 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);
}

View file

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

View file

@ -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);
})();

View file

@ -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);
})();

View file

@ -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);
})();

View file

@ -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);
})();

View file

@ -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);
})();

View file

@ -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');

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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 {
};

View file

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

View file

@ -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();
};

View file

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

View file

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

View file

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

View file

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

View file

@ -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 = {});

View file

@ -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;
})();

View file

@ -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');

View file

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

View file

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

View file

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

View file

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

View file

@ -1,4 +1,4 @@
spec: https://wicg.github.io/web-share/
spec: https://w3c.github.io/web-share/
suggested_reviewers:
- ewilligers
- mgiuca

View file

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

View file

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

View file

@ -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);
}

View file

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