Auto merge of #22711 - servo-wpt-sync:wpt_update_16-01-2019, r=jdm

Sync WPT with upstream (16-01-2019)

Automated downstream sync of changes from upstream as of 16-01-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/22711)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2019-01-16 22:50:02 -05:00 committed by GitHub
commit c558db9737
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
71 changed files with 893 additions and 241 deletions

View file

@ -1,5 +1,4 @@
[url-in-tags-revoke.window.html]
expected: TIMEOUT
[Fetching a blob URL immediately before revoking it works in an iframe.]
expected: FAIL
@ -15,6 +14,3 @@
[Opening a blob URL in a new window by clicking an <a> tag works immediately before revoking the URL.]
expected: FAIL
[Fetching a blob URL immediately before revoking it works in <script> tags.]
expected: TIMEOUT

View file

@ -12709,6 +12709,12 @@
{}
]
],
"html/editing/focus/sequential-focus-navigation-and-the-tabindex-attribute/focus-tabindex-event-manual.html": [
[
"/html/editing/focus/sequential-focus-navigation-and-the-tabindex-attribute/focus-tabindex-event-manual.html",
{}
]
],
"html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-direction-down-manual.html": [
[
"/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-direction-down-manual.html",
@ -113293,6 +113299,18 @@
{}
]
],
"css/css-display/display-inline-dynamic-001.html": [
[
"/css/css-display/display-inline-dynamic-001.html",
[
[
"/css/css-display/display-inline-dynamic-001-ref.html",
"=="
]
],
{}
]
],
"css/css-display/run-in/counter-increment-applies-to-011.xht": [
[
"/css/css-display/run-in/counter-increment-applies-to-011.xht",
@ -204250,26 +204268,6 @@
{}
]
],
"async-local-storage/META.yml": [
[
{}
]
],
"async-local-storage/helpers/als-tests.js": [
[
{}
]
],
"async-local-storage/helpers/class-assert.js": [
[
{}
]
],
"async-local-storage/helpers/equality-asserters.js": [
[
{}
]
],
"audio-output/META.yml": [
[
{}
@ -254910,6 +254908,11 @@
{}
]
],
"css/css-display/display-inline-dynamic-001-ref.html": [
[
{}
]
],
"css/css-display/run-in/META.yml": [
[
{}
@ -301315,6 +301318,26 @@
{}
]
],
"kv-storage/META.yml": [
[
{}
]
],
"kv-storage/helpers/class-assert.js": [
[
{}
]
],
"kv-storage/helpers/equality-asserters.js": [
[
{}
]
],
"kv-storage/helpers/kvs-tests.js": [
[
{}
]
],
"lifecycle/META.yml": [
[
{}
@ -307220,6 +307243,11 @@
{}
]
],
"resource-timing/resources/blank_page_green.htm.headers": [
[
{}
]
],
"resource-timing/resources/blue.png": [
[
{}
@ -311925,6 +311953,11 @@
{}
]
],
"service-workers/service-worker/resources/xhr-iframe.html": [
[
{}
]
],
"service-workers/service-worker/resources/xsl-base-url-iframe.xml": [
[
{}
@ -319375,6 +319408,11 @@
{}
]
],
"tools/wptrunner/requirements_epiphany.txt": [
[
{}
]
],
"tools/wptrunner/requirements_firefox.txt": [
[
{}
@ -319595,6 +319633,11 @@
{}
]
],
"tools/wptrunner/wptrunner/browsers/epiphany.py": [
[
{}
]
],
"tools/wptrunner/wptrunner/browsers/fennec.py": [
[
{}
@ -334942,48 +334985,6 @@
{}
]
],
"async-local-storage/api-surface.tentative.https.html": [
[
"/async-local-storage/api-surface.tentative.https.html",
{}
]
],
"async-local-storage/key-types.tentative.https.html": [
[
"/async-local-storage/key-types.tentative.https.html",
{}
]
],
"async-local-storage/non-secure-context-dynamic-import.tentative.html": [
[
"/async-local-storage/non-secure-context-dynamic-import.tentative.html",
{}
]
],
"async-local-storage/non-secure-context-import-statement.tentative.html": [
[
"/async-local-storage/non-secure-context-import-statement.tentative.html",
{}
]
],
"async-local-storage/non-secure-context-script-element.tentative.html": [
[
"/async-local-storage/non-secure-context-script-element.tentative.html",
{}
]
],
"async-local-storage/storage-smoke-test.tentative.https.html": [
[
"/async-local-storage/storage-smoke-test.tentative.https.html",
{}
]
],
"async-local-storage/undefined-value.https.html": [
[
"/async-local-storage/undefined-value.https.html",
{}
]
],
"audio-output/idlharness.https.window.js": [
[
"/audio-output/idlharness.https.window.html",
@ -345956,6 +345957,12 @@
{}
]
],
"css/css-shadow-parts/interaction-with-tree-abiding.html": [
[
"/css/css-shadow-parts/interaction-with-tree-abiding.html",
{}
]
],
"css/css-shadow-parts/invalidation-change-exportparts-forward.html": [
[
"/css/css-shadow-parts/invalidation-change-exportparts-forward.html",
@ -382482,6 +382489,48 @@
{}
]
],
"kv-storage/api-surface.https.html": [
[
"/kv-storage/api-surface.https.html",
{}
]
],
"kv-storage/key-types.https.html": [
[
"/kv-storage/key-types.https.html",
{}
]
],
"kv-storage/non-secure-context-dynamic-import.html": [
[
"/kv-storage/non-secure-context-dynamic-import.html",
{}
]
],
"kv-storage/non-secure-context-import-statement.html": [
[
"/kv-storage/non-secure-context-import-statement.html",
{}
]
],
"kv-storage/non-secure-context-script-element.html": [
[
"/kv-storage/non-secure-context-script-element.html",
{}
]
],
"kv-storage/storage-smoke-test.https.html": [
[
"/kv-storage/storage-smoke-test.https.html",
{}
]
],
"kv-storage/undefined-value.https.html": [
[
"/kv-storage/undefined-value.https.html",
{}
]
],
"lifecycle/freeze.html": [
[
"/lifecycle/freeze.html",
@ -407676,6 +407725,12 @@
{}
]
],
"resource-timing/redirects.sub.html": [
[
"/resource-timing/redirects.sub.html",
{}
]
],
"resource-timing/resource-timing-level1.sub.html": [
[
"/resource-timing/resource-timing-level1.sub.html",
@ -407810,12 +407865,6 @@
{}
]
],
"resource-timing/resource_redirects.html": [
[
"/resource-timing/resource_redirects.html",
{}
]
],
"resource-timing/resource_reparenting.html": [
[
"/resource-timing/resource_reparenting.html",
@ -409886,6 +409935,12 @@
{}
]
],
"service-workers/service-worker/xhr-response-url.https.html": [
[
"/service-workers/service-worker/xhr-response-url.https.html",
{}
]
],
"service-workers/service-worker/xsl-base-url.https.html": [
[
"/service-workers/service-worker/xsl-base-url.https.html",
@ -410660,6 +410715,12 @@
{}
]
],
"storage/estimate-usage-details-service-workers.https.tentative.window.js": [
[
"/storage/estimate-usage-details-service-workers.https.tentative.window.html",
{}
]
],
"storage/idlharness.https.any.js": [
[
"/storage/idlharness.https.any.html",
@ -416264,6 +416325,12 @@
{}
]
],
"webaudio/the-audio-api/the-audioparam-interface/audioparam-close.html": [
[
"/webaudio/the-audio-api/the-audioparam-interface/audioparam-close.html",
{}
]
],
"webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal.html": [
[
"/webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal.html",
@ -455531,50 +455598,6 @@
"55e8b9871e794c944f329e0e9df6ec140124c660",
"testharness"
],
"async-local-storage/META.yml": [
"1bbe9e5ac609aa33914ad79d4af7cb2fdf45b9c7",
"support"
],
"async-local-storage/api-surface.tentative.https.html": [
"927871a8961c44bd8adfee1b82aadc9f514962a7",
"testharness"
],
"async-local-storage/helpers/als-tests.js": [
"28087abf811dacda1ca00d81fe1306f97dde88ef",
"support"
],
"async-local-storage/helpers/class-assert.js": [
"31b25cab9f2d88d8df59a0b4ecb35eef3765e380",
"support"
],
"async-local-storage/helpers/equality-asserters.js": [
"ad4623c179d75c8d4ce8b1fa8503f943bf6a7c77",
"support"
],
"async-local-storage/key-types.tentative.https.html": [
"c3985b7711f77818260f08635d35ce3da553178b",
"testharness"
],
"async-local-storage/non-secure-context-dynamic-import.tentative.html": [
"9270f6c82fa2018d1d6c3a199cbe5f6ca2403b56",
"testharness"
],
"async-local-storage/non-secure-context-import-statement.tentative.html": [
"879729696dbb6a767530d77fbd94af0b42afe6b4",
"testharness"
],
"async-local-storage/non-secure-context-script-element.tentative.html": [
"feeddafc8daa02556eb0c5fe068dbde1d45642da",
"testharness"
],
"async-local-storage/storage-smoke-test.tentative.https.html": [
"f978480ff2b80ba5f892c2a2c429e882d655574d",
"testharness"
],
"async-local-storage/undefined-value.https.html": [
"c76c32f950704e42c06d498c4c8614dfbabb2aae",
"testharness"
],
"audio-output/META.yml": [
"b6a7d4d06259117af8fb843f6a8d252bac01a8f3",
"support"
@ -540940,7 +540963,7 @@
"reftest"
],
"css/css-backgrounds/background-image-first-line.html": [
"c8dee7050b6241279d5f462263b9fdead50004fc",
"206ff68d17360ee30768651eaab874f0a6c2996e",
"reftest"
],
"css/css-backgrounds/background-image-none-gradient-repaint.html": [
@ -547323,6 +547346,14 @@
"3d1dcb020df129dd10d66bb4b04d62c3c280cfb6",
"reftest"
],
"css/css-display/display-inline-dynamic-001-ref.html": [
"8b5f5015f9ebc818cbf48666773440a359e1d740",
"support"
],
"css/css-display/display-inline-dynamic-001.html": [
"7df697f940d4a20d26c92fa40266ed1f67d4cd19",
"reftest"
],
"css/css-display/display-list-item-height-after-dom-change.html": [
"f8d6e85cee2325f3ae51a950a276430d26c04189",
"testharness"
@ -569935,6 +569966,10 @@
"2dfd4b0510a758c73bf8ac8291088d39077578d7",
"testharness"
],
"css/css-shadow-parts/interaction-with-tree-abiding.html": [
"c11da7d12dea91306b79d141613ad6563dffb18f",
"testharness"
],
"css/css-shadow-parts/invalidation-change-exportparts-forward.html": [
"1e319deb633cdb765ea4613eb7c2b8c6dd0e615a",
"testharness"
@ -625171,6 +625206,10 @@
"c8bdaafdb89555c6708f0d84c3d41e437840be5b",
"testharness"
],
"html/editing/focus/sequential-focus-navigation-and-the-tabindex-attribute/focus-tabindex-event-manual.html": [
"73a3ff667ea8a450cf737890f44d2bfdbb848e98",
"manual"
],
"html/editing/the-hidden-attribute/hidden-1-ref.html": [
"7346ce919d210a740104ca5e82264bed8377c2d0",
"support"
@ -637679,6 +637718,50 @@
"5a4beba7e45830e72c28d460495e977a64a8bc7a",
"support"
],
"kv-storage/META.yml": [
"bf4a1e6e8b44bc78cf7a624a12b254cbac2f25a5",
"support"
],
"kv-storage/api-surface.https.html": [
"65452f55be044aa5ec722da26717f527ee81a4e3",
"testharness"
],
"kv-storage/helpers/class-assert.js": [
"31b25cab9f2d88d8df59a0b4ecb35eef3765e380",
"support"
],
"kv-storage/helpers/equality-asserters.js": [
"ad4623c179d75c8d4ce8b1fa8503f943bf6a7c77",
"support"
],
"kv-storage/helpers/kvs-tests.js": [
"0ffe71fad780f599a11d915d3b3512c95844f7bd",
"support"
],
"kv-storage/key-types.https.html": [
"0dc930258f8b554c6cae4398df3dba930dcdf03c",
"testharness"
],
"kv-storage/non-secure-context-dynamic-import.html": [
"6ccbf84ba1dc6acd4931da279c887635b7f8a771",
"testharness"
],
"kv-storage/non-secure-context-import-statement.html": [
"fda02aadf14fcb9be859c091df3a2ac1d2c56994",
"testharness"
],
"kv-storage/non-secure-context-script-element.html": [
"66802b1254eda87e1a966d6f835676ecba942cbe",
"testharness"
],
"kv-storage/storage-smoke-test.https.html": [
"df6fd8c8181f579df03972d25fe9a91b2354380f",
"testharness"
],
"kv-storage/undefined-value.https.html": [
"89da5d5c44f353bc1f5f93eaeaf3acd89eee386c",
"testharness"
],
"lifecycle/META.yml": [
"c1fcbca4c1f8366da1dd9eb91bc9427edeef1153",
"support"
@ -637852,7 +637935,7 @@
"testharness"
],
"mathml/META.yml": [
"6b347c12d8978156737257ff90b89cc27ab69847",
"a410f582f0a9b006946e8d9c46e1e0a2b5acea43",
"support"
],
"mathml/README.md": [
@ -650236,7 +650319,7 @@
"support"
],
"portals/portal-activate-event.html": [
"ed5602667bb9c898291d81ab2171b99137827a87",
"ac1505d2a5b2fe1df083eae75893483e025a2ad7",
"testharness"
],
"portals/portals-host-null.html": [
@ -650256,11 +650339,11 @@
"support"
],
"portals/resources/portal-activate-event-portal.html": [
"d0eebcd12e65193024f6444af922b7503e76d8ec",
"b2759c3701aaba4f5887a8b90bf4ee30e8153661",
"support"
],
"portals/resources/portal-activate-event-window.html": [
"1994dc3fad11e8b3ad9e8dc71f4aa96f06baa389",
"cf09caebc0ff9ac38facde84075a7af5be19fd48",
"support"
],
"portals/resources/portals-rendering-portal.html": [
@ -659987,6 +660070,10 @@
"63f9e06e19083a6d956af0d5916455cd7e91b89c",
"testharness"
],
"resource-timing/redirects.sub.html": [
"0e3f405e14b7af9f0b2a4fe5ce916ed1e47534de",
"testharness"
],
"resource-timing/resource-timing-level1.js": [
"95b5cdfb1ed0ca2bbfd6b692ad565512218dd7a4",
"support"
@ -660079,10 +660166,6 @@
"89b5874978c97cd25e31da263d07c9f91c69bbfa",
"testharness"
],
"resource-timing/resource_redirects.html": [
"606662afda4401dd0dccbac2b71b66f3b1961e6f",
"testharness"
],
"resource-timing/resource_reparenting.html": [
"7d4947fa7703d13a5adb465ff5eebbb4456cace9",
"testharness"
@ -660135,6 +660218,10 @@
"b8a1947b77e25ac6b0d100c75932e8c0a67d846f",
"support"
],
"resource-timing/resources/blank_page_green.htm.headers": [
"cb762eff806849df46dc758ef7b98b63f27f54c9",
"support"
],
"resource-timing/resources/blue.png": [
"820f8cace2143bfc45c0c301e84b6c29b8630068",
"support"
@ -664987,6 +665074,10 @@
"e388e461448f64d37d747b26830f4e869a2c6528",
"support"
],
"service-workers/service-worker/resources/xhr-iframe.html": [
"bfdfac69712b3e10526e1f059d2638b1fab06eeb",
"support"
],
"service-workers/service-worker/resources/xsl-base-url-iframe.xml": [
"065a07acb284821dde1cbea8680781a524f21bc2",
"support"
@ -665171,6 +665262,10 @@
"f9ba656b5178359f2c7b6e2419a57ff12ec79d23",
"testharness"
],
"service-workers/service-worker/xhr-response-url.https.html": [
"9f00cdd183052568ed7c6933f28f7859739e926c",
"testharness"
],
"service-workers/service-worker/xsl-base-url.https.html": [
"1d3c36408a66a7785b884c9cdc39dcd2820f9af0",
"testharness"
@ -666119,6 +666214,10 @@
"c854d5b8848638d11563a48348e7c3393ff58459",
"testharness"
],
"storage/estimate-usage-details-service-workers.https.tentative.window.js": [
"cf3a2aa9430d480df4fc7ff2487e7a42d5c15699",
"testharness"
],
"storage/helpers.js": [
"fbc746a30b6dfa6d00fc2db747c78ec09a7beefc",
"support"
@ -670864,7 +670963,7 @@
"support"
],
"tools/manifest/tests/test_manifest.py": [
"010a0c0a00a176bdabb561cc2a141aa0d1bbf139",
"8f649f1d098927b62bbf4c12ecade944ac081eee",
"support"
],
"tools/manifest/tests/test_sourcefile.py": [
@ -675268,7 +675367,7 @@
"support"
],
"tools/tox.ini": [
"fc66c6c2ac39ce66b915af90a610d420e1278d7a",
"3b0c6d172bc02e8df5fed5a08cd354416eff50dd",
"support"
],
"tools/webdriver/.gitignore": [
@ -675308,7 +675407,7 @@
"support"
],
"tools/wpt/browser.py": [
"71d1e61918a86e8d8f0a9faca96c6f1ceade6d31",
"ea8cc04f7d49eb2dd4691c0d7ce012ffb1ade5be",
"support"
],
"tools/wpt/commands.json": [
@ -675336,7 +675435,7 @@
"support"
],
"tools/wpt/run.py": [
"44cf3137d41338a7e57e29ae998859b4bc42a82b",
"633d6b254db289f50b77e4c7f589b888caa2b566",
"support"
],
"tools/wpt/testfiles.py": [
@ -675443,6 +675542,10 @@
"497cad357398149ade1851079ac5380520932f88",
"support"
],
"tools/wptrunner/requirements_epiphany.txt": [
"9115b7ac4e8f6a6e4703a7b61d2715075e2f6053",
"support"
],
"tools/wptrunner/requirements_firefox.txt": [
"9e6f6b51ad7bf39181811789f0372a6b085d4c7f",
"support"
@ -675596,7 +675699,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/__init__.py": [
"f86792d47410f8f574843c13ed86262bdbfafb21",
"fdedda44d28dcdd079b059864d9fafc992eff8c0",
"support"
],
"tools/wptrunner/wptrunner/browsers/base.py": [
@ -675619,6 +675722,10 @@
"c2545de46f0b5def00c273ecfb5a57f0d4029531",
"support"
],
"tools/wptrunner/wptrunner/browsers/epiphany.py": [
"599ec9f3110f89f5d64effe98130ede930f1fb7c",
"support"
],
"tools/wptrunner/wptrunner/browsers/fennec.py": [
"b8e4ebc4aeb9574652ec7dcd83dd0eca6b78aa94",
"support"
@ -679887,6 +679994,10 @@
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"support"
],
"webaudio/the-audio-api/the-audioparam-interface/audioparam-close.html": [
"b5555b0137af4c1c8f6c5578de4bc9c5eedfe405",
"testharness"
],
"webaudio/the-audio-api/the-audioparam-interface/audioparam-connect-audioratesignal.html": [
"517d64f3dbb69e610a5ed17475c45f530f749a42",
"testharness"

View file

@ -0,0 +1,2 @@
[floats-in-table-caption-001.html]
expected: FAIL

View file

@ -1,2 +1,2 @@
[abspos-float-with-inline-container.html]
expected: TIMEOUT
expected: FAIL

View file

@ -1,2 +0,0 @@
[white-space-002.xht]
expected: FAIL

View file

@ -1,2 +0,0 @@
[line-height-204.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[mix-blend-mode-paragraph.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[background-repeat-round-roundup.xht]
expected: FAIL

View file

@ -329,3 +329,9 @@
[Matching font-weight: '430' should prefer '500' over '400 425']
expected: FAIL
[Matching font-style: 'oblique 20deg' should prefer 'oblique 10deg' over 'italic']
expected: FAIL
[Matching font-style: 'oblique 21deg' should prefer 'oblique 40deg 50deg' over 'oblique 20deg']
expected: FAIL

View file

@ -38,3 +38,6 @@
[Test @font-face matching for weight 420]
expected: FAIL
[Test @font-face matching for weight 500]
expected: FAIL

View file

@ -0,0 +1,2 @@
[line-break-normal-018.xht]
expected: FAIL

View file

@ -0,0 +1,2 @@
[line-break-strict-018.xht]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-transform-full-size-kana-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-transform-full-size-kana-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-transform-full-size-kana-003.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[text-transform-full-size-kana-004.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[trailing-ideographic-space-004.html]
expected: FAIL

View file

@ -1,2 +0,0 @@
[word-break-keep-all-006.html]
expected: FAIL

View file

@ -74,6 +74,3 @@
[opacity end]
expected: FAIL
[border-top-width end]
expected: FAIL

View file

@ -1,2 +1,2 @@
[parser-sets-attributes-and-children.html]
expected: CRASH
expected: TIMEOUT

View file

@ -2,7 +2,7 @@
type: testharness
[single-byte-decoder.html?document]
expected: CRASH
expected: TIMEOUT
[ISO-8859-4: iso_8859-4:1988 (document.characterSet and document.inputEncoding)]
expected: FAIL
@ -32,7 +32,7 @@
[single-byte-decoder.html?XMLHttpRequest]
expected: CRASH
expected: TIMEOUT
[ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)]
expected: FAIL
@ -55,12 +55,9 @@
expected: FAIL
[windows-1252: iso_8859-1:1987 (XMLHttpRequest)]
expected: FAIL
[windows-1254: iso_8859-9:1989 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1258: cp1258 (XMLHttpRequest)]
[windows-1254: iso_8859-9:1989 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1256: cp1256 (XMLHttpRequest)]
@ -96,9 +93,6 @@
[windows-1255: x-cp1255 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1257: x-cp1257 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1253: windows-1253 (XMLHttpRequest)]
expected: TIMEOUT
@ -123,12 +117,6 @@
[windows-1255: windows-1255 (XMLHttpRequest)]
expected: TIMEOUT
[x-mac-cyrillic: x-mac-cyrillic (XMLHttpRequest)]
expected: TIMEOUT
[windows-1256: windows-1256 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1256: x-cp1256 (XMLHttpRequest)]
expected: TIMEOUT
@ -141,21 +129,12 @@
[windows-1254: cp1254 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1252: iso88591 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1252: iso_8859-1 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1252: latin1 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1253: cp1253 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1252: iso8859-1 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1252: x-cp1252 (XMLHttpRequest)]
expected: TIMEOUT
@ -165,10 +144,10 @@
[windows-1252: windows-1252 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1252: iso-ir-100 (XMLHttpRequest)]
[windows-1252: us-ascii (XMLHttpRequest)]
expected: TIMEOUT
[windows-1252: us-ascii (XMLHttpRequest)]
[windows-1252: iso-8859-1 (XMLHttpRequest)]
expected: TIMEOUT

View file

@ -312,3 +312,15 @@
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_1.html]
[Multiple history traversals from the same task]
expected: FAIL

View file

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

View file

@ -4,7 +4,7 @@
expected: FAIL
[picture: source (max-width:500px) valid image, img valid image, resize to wide]
expected: TIMEOUT
expected: FAIL
[picture: source (max-width:500px) valid image, img broken image, resize to narrow]
expected: FAIL

View file

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

View file

@ -0,0 +1,7 @@
[toggleEvent.html]
[Calling open twice on 'details' fires only one toggle event]
expected: FAIL
[Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
expected: FAIL

View file

@ -1,4 +1,5 @@
[offscreencanvas.commit.w.html]
expected: ERROR
[Test that calling OffscreenCanvas's commit pushes its contents to its placeholder.]
expected: FAIL

View file

@ -12,6 +12,3 @@
[Verifies the resolution of entry.startTime is at least 5 microseconds.]
expected: TIMEOUT
[Verifies the resolution of performance.now() is at least 5 microseconds.]
expected: FAIL

View file

@ -0,0 +1,4 @@
[redirects.sub.html]
[Testing resource entries]
expected: FAIL

View file

@ -1,2 +0,0 @@
[resource_timing_buffer_full_eventually.html]
expected: CRASH

View file

@ -1,4 +1,5 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -0,0 +1,2 @@
[audioparam-close.html]
expected: ERROR

View file

@ -1,4 +1,5 @@
[import-in-moduleworker.html]
expected: ERROR
[Base URL in module dedicated workers: import]
expected: FAIL

View file

@ -1,4 +1,5 @@
[sharedworker-in-worker.html]
expected: ERROR
[Base URL in workers: new SharedWorker()]
expected: FAIL

View file

@ -0,0 +1,2 @@
[transition_calc_implicit.html]
expected: TIMEOUT

View file

@ -1,2 +0,0 @@
[scroll_root.html]
expected: FAIL

View file

@ -1,3 +0,0 @@
spec: https://domenic.github.io/async-local-storage/
suggested_reviewers:
- domenic

View file

@ -1,6 +1,9 @@
<!DOCTYPE html>
<title>CSS Test: background-image applicability to ::first-letter</title>
<link rel="help" href="http://www.w3.org/TR/css3-background/">
<html class="reftest-wait">
<title>CSS Test: background-image applicability to ::first-line</title>
<link rel="help" href="http://www.w3.org/TR/css3-background/#placement">
<link rel="help" href="http://www.w3.org/TR/css3-background/#the-background-image">
<link rel="help" href="http://www.w3.org/TR/CSS21/colors.html#background-properties">
<link rel="help" href="http://www.w3.org/TR/CSS21/selector.html#first-line-pseudo">
<link rel="match" href="reference/background-image-first-line-ref.html">
<meta name="flags" content="ahem image">
@ -17,3 +20,11 @@
</style>
<p>Test passes if cat image is visible.</p>
<div id="content">X</div>
<script src="/common/reftest-wait.js"></script>
<script>
// Some browser may delay one frame to update the background-image in first-line.
onload = () => {
requestAnimationFrame(() => requestAnimationFrame(takeScreenshot));
};
</script>
</html>

View file

@ -0,0 +1,4 @@
<!DOCTYPE html>
<style>div::first-line { font-family:monospace; color:green; }</style>
<p>Test passes if PASS is displayed in green below.</p>
<div>PASS</div>

View file

@ -0,0 +1,10 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-display/">
<link rel="match" href="display-inline-dynamic-001-ref.html">
<style>div::first-line { font-family:monospace; color:green; }</style>
<p>Test passes if PASS is displayed in green below.</p>
<div>P<span id="showme" style="display:none;">AS</span>S</div>
<script>
document.body.offsetTop;
showme.style.display = "inline";
</script>

View file

@ -0,0 +1,56 @@
<!DOCTYPE html>
<html>
<head>
<title>CSS Shadow Parts - Interaction with tree-abiding</title>
<meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
<link href="http://www.google.com/" rel="author" title="Google">
<link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/shadow-helper.js"></script>
</head>
<body>
<style>
#c-e::part(before-p)::before { color: green; }
#c-e::part(after-p)::after { color: green; }
#c-e::part(placeholder-p)::placeholder { color: green; }
</style>
<script>installCustomElement("custom-element", "custom-element-template");</script>
<template id="custom-element-template">
<style>
#before-i::before { content: "this text"; color: red; }
#after-i::after { content: "this text"; color: red; }
#placeholder-i::placeholder { color: red; }
</style>
<div>
The following text should be green:
<span id="before-i" part="before-p"></span>
</div>
<div>
The following text should be green:
<span id="after-i" part="after-p"></span>
</div>
<div>
The following text should be green:
<input id="placeholder-i" part="placeholder-p" placeholder="this text"></input>
</div>
</template>
<custom-element id="c-e"></custom-element>
<script>
"use strict";
const colorGreen = "rgb(0, 128, 0)";
test(function() {
const el = getElementByShadowIds(document, ["c-e", "before-i"]);
assert_equals(window.getComputedStyle(el, '::before').color, colorGreen);
}, "::before in selected host is styled");
test(function() {
const el = getElementByShadowIds(document, ["c-e", "after-i"]);
assert_equals(window.getComputedStyle(el, '::after').color, colorGreen);
}, "::after in selected host is styled");
test(function() {
const el = getElementByShadowIds(document, ["c-e", "placeholder-i"]);
assert_equals(window.getComputedStyle(el, '::placeholder').color, colorGreen);
}, "::placeholder in selected host is styled");
</script>
</body>
</html>

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML Test: tabindex - focus, click</title>
<link rel="author" title="Intel" href="www.intel.com/">
<link rel="help" href="https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute">
<meta name="flags" content="interact">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<h2>Test steps</h2>
<p>Focus on the button below by "Tab" key, then press "Enter" key</p>
<p><button type="button">Test tabIndex</button></p>
<script>
setup({explicit_done: true});
setup({explicit_timeout: true});
let button = document.querySelector("button");
let focused = false;
on_event(button, "focus", () => {
focused = !focused;
});
on_event(button, "click", () => {
test(() => {
assert_true(focused, "Focus on the button by Tab key");
}, "Check if click event will be fired when press the 'enter' key while the element is focused");
done();
});
</script>

View file

@ -0,0 +1,3 @@
spec: https://wicg.github.io/kv-storage/
suggested_reviewers:
- domenic

View file

@ -1,14 +1,14 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Async local storage API surface</title>
<title>KV Storage: API surface</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script type="module">
import { storage, StorageArea } from "std:async-local-storage";
import { storage, StorageArea } from "std:kv-storage";
import * as classAssert from "./helpers/class-assert.js";
import { testWithArea } from "./helpers/als-tests.js";
import { testWithArea } from "./helpers/kvs-tests.js";
test(() => {
classAssert.isConstructor(StorageArea);

View file

@ -1,4 +1,4 @@
import { StorageArea, storage as defaultArea } from "std:async-local-storage";
import { StorageArea, storage as defaultArea } from "std:kv-storage";
import { assertArrayCustomEquals } from "./equality-asserters.js";
export function testWithArea(testFn, description) {

View file

@ -1,12 +1,12 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Async local storage: tests against various key types</title>
<title>KV Storage: tests against various key types</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script type="module">
import { testWithArea, testVariousMethods } from "./helpers/als-tests.js";
import { testWithArea, testVariousMethods } from "./helpers/kvs-tests.js";
import { assertEqualDates, assertEqualArrayBuffers, assertArrayBufferEqualsABView }
from "./helpers/equality-asserters.js";

View file

@ -1,6 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Async local storage: should not work in non-secure contexts when included via import()</title>
<title>KV Storage: should not work in non-secure contexts when included via import()</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
@ -13,6 +13,6 @@ test(() => {
}, "Prerequisite check");
promise_test(t => {
return promise_rejects(t, "SecurityError", import("std:async-local-storage"));
return promise_rejects(t, "SecurityError", import("std:kv-storage"));
});
</script>

View file

@ -1,6 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Async local storage: should not work in non-secure contexts when included via an import statement</title>
<title>KV Storage: should not work in non-secure contexts when included via an import statement</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
@ -23,5 +23,5 @@ async_test(t => {
</script>
<script type="module">
import "std:async-local-storage";
import "std:kv-storage";
</script>

View file

@ -1,6 +1,6 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Async local storage: should not work in non-secure contexts when included via a script element</title>
<title>KV Storage: should not work in non-secure contexts when included via a script element</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
@ -22,4 +22,4 @@ async_test(t => {
});
</script>
<script type="module" src="std:async-local-storage"></script>
<script type="module" src="std:kv-storage"></script>

View file

@ -1,13 +1,13 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Async local storage storage export smoke test</title>
<title>KV storage: storage export smoke test</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script type="module">
import { testVariousMethodsWithDefaultArea } from "./helpers/als-tests.js";
import { storage } from "std:async-local-storage";
import { testVariousMethodsWithDefaultArea } from "./helpers/kvs-tests.js";
import { storage } from "std:kv-storage";
test(() => {
const { backingStore } = storage;
@ -17,7 +17,7 @@ test(() => {
assert_own_property(backingStore, "version");
assert_equals(Object.getPrototypeOf(backingStore), Object.prototype);
assert_equals(backingStore.database, "async-local-storage:default");
assert_equals(backingStore.database, "kv-storage:default");
assert_equals(backingStore.store, "store");
assert_equals(backingStore.version, 1);
}, "backingStore returns the correct object");

View file

@ -1,14 +1,14 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Async local storage: undefined keys</title>
<!-- https://github.com/domenic/async-local-storage/commit/5bf31109f37d1371f619ea33d0e2391f10e8b8f5 -->
<title>KV Storage: undefined values</title>
<!-- https://github.com/wicg/kv-storage/commit/5bf31109f37d1371f619ea33d0e2391f10e8b8f5 -->
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script type="module">
import { StorageArea } from "std:async-local-storage";
import { testWithArea } from "./helpers/als-tests.js";
import { StorageArea } from "std:kv-storage";
import { testWithArea } from "./helpers/kvs-tests.js";
testWithArea(async (area) => {
assert_equals(await area.get("key"), undefined);

View file

@ -1,3 +1,3 @@
spec: https://w3c.github.io/mathml/
spec: http://www.mathml-association.org/MathMLinHTML5/
suggested_reviewers:
- fred-wang

View file

@ -4,11 +4,29 @@
<script src="/resources/testharnessreport.js"></script>
<script>
async_test(function(t) {
var bc = new BroadcastChannel("test");
var bc = new BroadcastChannel("test-eventlistener");
bc.onmessage = t.step_func_done(function(e) {
assert_equals(e.data, "passed");
bc.close();
});
window.open("resources/portal-activate-event-window.html");
window.open("resources/portal-activate-event-window.html?test=eventlistener");
}, "Tests that the PortalActivateEvent is dispatched when a portal is activated.");
async_test(function(t) {
var bc = new BroadcastChannel("test-eventhandler");
bc.onmessage = t.step_func_done(function(e) {
assert_equals(e.data, "passed");
bc.close();
});
window.open("resources/portal-activate-event-window.html?test=eventhandler");
}, "Tests that the portalactivate event handler is dispatched when a portal is activated.");
async_test(function(t) {
var bc = new BroadcastChannel("test-bodyeventhandler");
bc.onmessage = t.step_func_done(function(e) {
assert_equals(e.data, "passed");
bc.close();
});
window.open("resources/portal-activate-event-window.html?test=bodyeventhandler");
}, "Tests that the HTMLBodyElement has the portalactivate event handler.");
</script>

View file

@ -1,13 +1,23 @@
<!DOCTYPE html>
<title>Tests that the PortalActivateEvent is dispatched when a portal is activated</title>
<script>
window.addEventListener("portalactivate", function(e) {
var bc = new BroadcastChannel("test");
var test = (new URL(location)).searchParams.get("test");
function portalActivate(e) {
var bc = new BroadcastChannel("test-" + test);
bc.postMessage("passed");
bc.close();
});
}
var bc = new BroadcastChannel("portal");
if (test == "bodyeventhandler") {
document.write('<body onportalactivate="portalActivate()"></body>');
} else if (test == "eventhandler") {
window.onportalactivate = portalActivate;
} else if (test == "eventlistener") {
window.addEventListener("portalactivate", portalActivate);
}
var bc = new BroadcastChannel("portal-" + test);
bc.postMessage("loaded");
bc.close();
</script>

View file

@ -1,11 +1,17 @@
<!DOCTYPE html>
<script>
var bc = new BroadcastChannel("portal");
bc.onmessage = function(e) {
document.querySelector("portal").activate();
bc.close();
window.onload = function(e) {
var test = (new URL(location)).searchParams.get("test");
var portal = document.createElement("portal");
portal.src = "portal-activate-event-portal.html" + location.search;
document.body.appendChild(portal);
var bc = new BroadcastChannel("portal-" + test);
bc.onmessage = function(e) {
document.querySelector("portal").activate();
bc.close();
}
}
</script>
<body>
<portal src="portal-activate-event-portal.html"></portal>
</body>

View file

@ -11,16 +11,22 @@
<script src="resources/webperftestharnessextension.js"></script>
<script>
let iframe;
const redirect_url = 'common/redirect.py';
const url_prefix = redirect_url + '?location=/resource-timing/resources/';
const https_url_prefix = redirect_url + '?location=https://{{hosts[][www]}}:{{ports[https][0]}}/resource-timing/resources/';
function setup_iframe() {
const iframe_content =
'<link rel="stylesheet" href="/common/redirect.py?location=/resource-timing/resources/resource_timing_test0.css"></link>' +
'<img src="/common/redirect.py?location=/resource-timing/resources/blue.png"></img>' +
'<iframe src="/common/redirect.py?location=/resource-timing/resources/blank_page_green.htm"></iframe>' +
'<script src="/common/redirect.py?location=/resource-timing/resources/empty_script.js"></scr' + 'ipt>' +
'<link rel="stylesheet" href="/' + url_prefix + 'resource_timing_test0.css"></link>' +
'<img src="/' + url_prefix + 'blue.png"></img>' +
'<iframe src="/' + url_prefix + 'blank_page_green.htm"></iframe>' +
'<script src="/' + url_prefix + 'empty_script.js"></scr' + 'ipt>' +
'<scr' + 'ipt>' +
'const xhr = new XMLHttpRequest;' +
'xhr.open("GET", "/common/redirect.py?location=/resource-timing/resources/blank_page_green.htm?id=xhr", false);' +
'xhr.open("GET", "/' + url_prefix + 'blank_page_green.htm?id=xhr", false);' +
'xhr.send();' +
'const xhr2 = new XMLHttpRequest;' +
'xhr2.open("GET", "/' + https_url_prefix + 'blank_page_green.htm?id=xhr", false);' +
'xhr2.send();' +
'</scr' + 'ipt>';
iframe = document.getElementById('frameContext');
iframe.contentWindow.document.write(iframe_content);
@ -30,14 +36,15 @@ function onload_test() {
const entries = context.getEntriesByType('resource');
const index = window.location.pathname.lastIndexOf('resource-timing');
const pathname = window.location.pathname.substring(0, index) +
'common/redirect.py?location=/resource-timing/resources/';
const pathname = window.location.pathname.substring(0, index) + url_prefix;
const https_pathname = window.location.pathname.substring(0, index) + https_url_prefix;
let expected_entries = {};
expected_entries[pathname + 'resource_timing_test0.css'] = 'link';
expected_entries[pathname + 'blue.png'] = 'img';
expected_entries[pathname + 'blank_page_green.htm'] = 'iframe';
expected_entries[pathname + 'empty_script.js'] = 'script';
expected_entries[pathname + 'blank_page_green.htm?id=xhr'] = 'xmlhttprequest';
expected_entries[https_pathname + 'blank_page_green.htm?id=xhr'] = 'xmlhttprequest';
test_resource_entries(entries, expected_entries);
}

View file

@ -0,0 +1 @@
Access-Control-Allow-Origin: *

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>iframe for xhr tests</title>
<script>
async function xhr(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onload = () => {
resolve(xhr);
};
xhr.onerror = () => {
reject('xhr failed');
};
xhr.open('GET', url);
xhr.send();
});
}
</script>

View file

@ -0,0 +1,36 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Service Worker: XHR responseURL uses the response url</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script>
const scope = 'resources/xhr-iframe.html';
const script = 'resources/fetch-rewrite-worker.js';
let iframe;
// Test that XMLHttpRequest.responseURL uses the response URL from the service
// worker.
promise_test(async (t) => {
t.add_cleanup(async () => {
if (iframe)
iframe.remove();
await service_worker_unregister(t, scope);
});
// Set up a controlled iframe.
const registration =
await service_worker_unregister_and_register(t, script, scope);
await wait_for_state(t, registration.installing, 'activated');
iframe = await with_iframe(scope);
// Build the XHR URL. Set the |url| param to tell the service worker
// to respondWith(fetch(|url|)).
const target = new URL('resources/dummy.txt', window.location);
const url = `test?url=${encodeURIComponent(target)}`;
// Perform the XHR.
const xhr = await iframe.contentWindow.xhr(url);
assert_equals(xhr.responseURL, target.href);
}, 'XHR responseURL should be the response URL');
</script>

View file

@ -0,0 +1,38 @@
// META: title=StorageManager: estimate() for service worker registrations
const wait_for_active = worker => new Promise(resolve =>{
if (worker.active) { resolve(worker.active); }
const listen_for_active = worker => e => {
if (e.target.state === 'activated') { resolve(worker.active); }
}
if (worker.waiting) {
worker.waiting
.addEventListener('statechange', listen_for_active(worker.waiting));
}
if (worker.installing) {
worker.installing
.addEventListener('statechange', listen_for_active(worker.installing));
}
});
promise_test(async t => {
let estimate = await navigator.storage.estimate();
const usageBeforeCreate = estimate.usageDetails.serviceWorkerRegistrations ||
0;
// Note: helpers.js is an arbitrary file; it could be any file that
// exists, but this test does not depend on the contents of said file.
const serviceWorkerRegistration = await
navigator.serviceWorker.register('./helpers.js');
t.add_cleanup(() => serviceWorkerRegistration.unregister());
await wait_for_active(serviceWorkerRegistration);
estimate = await navigator.storage.estimate();
assert_true('serviceWorkerRegistrations' in estimate.usageDetails);
const usageAfterCreate = estimate.usageDetails.serviceWorkerRegistrations;
assert_greater_than(
usageAfterCreate, usageBeforeCreate,
'estimated usage should increase after service worker is registered');
}, 'estimate() shows usage increase after large value is stored');

View file

@ -66,8 +66,7 @@ def sourcefile_strategy(draw):
@h.given(hs.lists(sourcefile_strategy(),
min_size=1, average_size=10, max_size=1000,
unique_by=lambda x: x.rel_path))
min_size=1, max_size=1000, unique_by=lambda x: x.rel_path))
@h.example([SourceFileWithTest("a", "0"*40, item.ConformanceCheckerTest)])
def test_manifest_to_json(s):
m = manifest.Manifest()
@ -83,8 +82,7 @@ def test_manifest_to_json(s):
@h.given(hs.lists(sourcefile_strategy(),
min_size=1, average_size=10,
unique_by=lambda x: x.rel_path))
min_size=1, unique_by=lambda x: x.rel_path))
@h.example([SourceFileWithTest("a", "0"*40, item.TestharnessTest)])
@h.example([SourceFileWithTest("a", "0"*40, item.RefTest, [("/aa", "==")])])
def test_manifest_idempotent(s):

View file

@ -8,7 +8,6 @@ deps =
pytest-cov
mock
hypothesis
pytest-catchlog
commands = pytest --cov {posargs}

View file

@ -758,3 +758,32 @@ class WebKit(Browser):
def version(self, binary=None, webdriver_binary=None):
return None
class Epiphany(Browser):
"""Epiphany-specific interface."""
product = "epiphany"
requirements = "requirements_epiphany.txt"
def install(self, dest=None, channel=None):
raise NotImplementedError
def find_binary(self, venv_path=None, channel=None):
return find_executable("epiphany")
def find_webdriver(self, channel=None):
return find_executable("WebKitWebDriver")
def install_webdriver(self, dest=None, channel=None):
raise NotImplementedError
def version(self, binary=None, webdriver_binary=None):
if binary is None:
return None
output = call(binary, "--version")
if output:
# Stable release output looks like: "Web 3.30.2"
# Tech Preview output looks like "Web 3.31.3-88-g97db4f40f"
return output.split()[1]
return None

View file

@ -422,7 +422,7 @@ class Servo(BrowserSetup):
binary = self.browser.find_binary(self.venv.path, None)
if binary is None:
raise WptrunError("Unable to find servo binary on the PATH")
raise WptrunError("Unable to find servo binary in PATH")
kwargs["binary"] = binary
@ -442,6 +442,29 @@ class WebKit(BrowserSetup):
pass
class Epiphany(BrowserSetup):
name = "epiphany"
browser_cls = browser.Epiphany
def install(self, venv, channel=None):
raise NotImplementedError
def setup_kwargs(self, kwargs):
if kwargs["binary"] is None:
binary = self.browser.find_binary()
if binary is None:
raise WptrunError("Unable to find epiphany in PATH")
kwargs["binary"] = binary
if kwargs["webdriver_binary"] is None:
webdriver_binary = self.browser.find_webdriver()
if webdriver_binary is None:
raise WptrunError("Unable to find WebKitWebDriver in PATH")
kwargs["webdriver_binary"] = webdriver_binary
product_setup = {
"fennec": Fennec,
"firefox": Firefox,
@ -456,6 +479,7 @@ product_setup = {
"sauce": Sauce,
"opera": Opera,
"webkit": WebKit,
"epiphany": Epiphany,
}

View file

@ -0,0 +1 @@
mozprocess == 0.26

View file

@ -34,4 +34,5 @@ product_list = ["chrome",
"servo",
"servodriver",
"opera",
"webkit"]
"webkit",
"epiphany"]

View file

@ -0,0 +1,74 @@
from .base import get_timeout_multiplier # noqa: F401
from .webkit import WebKitBrowser
from ..executors import executor_kwargs as base_executor_kwargs
from ..executors.executorwebdriver import (WebDriverTestharnessExecutor, # noqa: F401
WebDriverRefTestExecutor) # noqa: F401
from ..executors.executorwebkit import WebKitDriverWdspecExecutor # noqa: F401
__wptrunner__ = {"product": "epiphany",
"check_args": "check_args",
"browser": "EpiphanyBrowser",
"browser_kwargs": "browser_kwargs",
"executor": {"testharness": "WebDriverTestharnessExecutor",
"reftest": "WebDriverRefTestExecutor",
"wdspec": "WebKitDriverWdspecExecutor"},
"executor_kwargs": "executor_kwargs",
"env_extras": "env_extras",
"env_options": "env_options",
"run_info_extras": "run_info_extras",
"timeout_multiplier": "get_timeout_multiplier"}
def check_args(**kwargs):
pass
def browser_kwargs(test_type, run_info_data, config, **kwargs):
return {"binary": kwargs["binary"],
"webdriver_binary": kwargs["webdriver_binary"],
"webdriver_args": kwargs.get("webdriver_args")}
def capabilities(server_config, **kwargs):
args = kwargs.get("binary_args", [])
if "--automation-mode" not in args:
args.append("--automation-mode")
return {
"browserName": "Epiphany",
"browserVersion": "3.31.4", # First version to support automation
"platformName": "ANY",
"webkitgtk:browserOptions": {
"binary": kwargs["binary"],
"args": args,
"certificates": [
{"host": server_config["browser_host"],
"certificateFile": kwargs["host_cert_path"]}]}}
def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
**kwargs):
executor_kwargs = base_executor_kwargs(test_type, server_config,
cache_manager, run_info_data, **kwargs)
executor_kwargs["close_after_done"] = True
executor_kwargs["capabilities"] = capabilities(server_config, **kwargs)
return executor_kwargs
def env_extras(**kwargs):
return []
def env_options():
return {}
def run_info_extras(**kwargs):
return {"webkit_port": "gtk"}
class EpiphanyBrowser(WebKitBrowser):
def __init__(self, logger, binary=None, webdriver_binary=None,
webdriver_args=None):
WebKitBrowser.__init__(self, logger, binary, webdriver_binary,
webdriver_args)

View file

@ -0,0 +1,161 @@
<!doctype html>
<html>
<head>
<title>Test AudioParam events very close in time</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/webaudio/resources/audit-util.js"></script>
<script src="/webaudio/resources/audit.js"></script>
</head>
<body>
<script>
const audit = Audit.createTaskRunner();
// Largest sample rate that is required to be supported and is a power of
// two, to eliminate round-off as much as possible.
const sampleRate = 65536;
// Only need one render quantum for testing.
const testFrames = 128;
// Largest representable single-float number
const floatMax = Math.fround(3.4028234663852886e38);
// epspos is the smallest x such that 1 + x != 1
const epspos = 1.1102230246251568e-16;
// epsneg is the smallest x such that 1 - x != 1
const epsneg = 5.551115123125784e-17;
audit.define(
{label: 'no-nan', description: 'NaN does not occur'},
(task, should) => {
const context = new OfflineAudioContext({
numberOfChannels: 1,
sampleRate: sampleRate,
length: testFrames
});
const src0 = new ConstantSourceNode(context, {offset: 0});
// This should always succeed. We just want to print out a message
// that |src0| is a constant source node for the following
// processing.
should(src0, 'src0 = new ConstantSourceNode(context, {offset: 0})')
.beEqualTo(src0);
src0.connect(context.destination);
// Values for the first event (setValue). |time1| MUST be 0.
const time1 = 0;
const value1 = 10;
// Values for the second event (linearRamp). |value2| must be huge,
// and |time2| must be small enough that 1/|time2| overflows a
// single float. This value is the least positive single float.
const value2 = floatMax;
const time2 = 1.401298464324817e-45;
// These should always succeed; the messages are just informational
// to show the events that we scheduled.
should(
src0.offset.setValueAtTime(value1, time1),
`src0.offset.setValueAtTime(${value1}, ${time1})`)
.beEqualTo(src0.offset);
should(
src0.offset.linearRampToValueAtTime(value2, time2),
`src0.offset.linearRampToValueAtTime(${value2}, ${time2})`)
.beEqualTo(src0.offset);
src0.start();
context.startRendering()
.then(buffer => {
const output = buffer.getChannelData(0);
// Since time1 = 0, the output at frame 0 MUST be value1.
should(output[0], 'output[0]').beEqualTo(value1);
// Since time2 < 1, output from frame 1 and later must be a
// constant.
should(output.slice(1), 'output[1]')
.beConstantValueOf(value2);
})
.then(() => task.done());
});
audit.define(
{label: 'interpolation', description: 'Interpolation of linear ramp'},
(task, should) => {
const context = new OfflineAudioContext({
numberOfChannels: 1,
sampleRate: sampleRate,
length: testFrames
});
const src1 = new ConstantSourceNode(context, {offset: 0});
// This should always succeed. We just want to print out a message
// that |src1| is a constant source node for the following
// processing.
should(src1, 'src1 = new ConstantSourceNode(context, {offset: 0})')
.beEqualTo(src1);
src1.connect(context.destination);
const frame = 1;
// These time values are arranged so that time1 < frame/sampleRate <
// time2. This means we need to interpolate to get a value at given
// frame.
//
// The values are not so important, but |value2| should be huge.
const time1 = frame * (1 - epsneg) / context.sampleRate;
const value1 = 1e15;
const time2 = frame * (1 + epspos) / context.sampleRate;
const value2 = floatMax;
should(
src1.offset.setValueAtTime(value1, time1),
`src1.offset.setValueAtTime(${value1}, ${time1})`)
.beEqualTo(src1.offset);
should(
src1.offset.linearRampToValueAtTime(value2, time2),
`src1.offset.linearRampToValueAtTime(${value2}, ${time2})`)
.beEqualTo(src1.offset);
src1.start();
context.startRendering()
.then(buffer => {
const output = buffer.getChannelData(0);
// Sanity check
should(time2 - time1, 'Event time difference')
.notBeEqualTo(0);
// Because 0 < time1 < 1, output must be 0 at time 0.
should(output[0], 'output[0]').beEqualTo(0);
// Because time1 < 1/sampleRate < time2, we need to
// interpolate the value between these times to determine the
// output at frame 1.
const t = frame / context.sampleRate;
const v = value1 +
(value2 - value1) * (t - time1) / (time2 - time1);
should(output[1], 'output[1]').beCloseTo(v, {threshold: 0});
// Because 1 < time2 < 2, the output at frame 2 and higher is
// constant.
should(output.slice(2), 'output[2:]')
.beConstantValueOf(value2);
})
.then(() => task.done());
});
audit.run();
</script>
</body>
</html>