Auto merge of #21907 - servo-wpt-sync:wpt_update_10-10-2018, r=jdm

Sync WPT with upstream (10-10-2018)

Automated downstream sync of changes from upstream as of 10-10-2018.
[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/21907)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2018-10-10 23:33:10 -04:00 committed by GitHub
commit 35bf180dcb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
87 changed files with 1442 additions and 452 deletions

View file

@ -129333,6 +129333,18 @@
{}
]
],
"css/css-position/position-sticky-child-multicolumn.html": [
[
"/css/css-position/position-sticky-child-multicolumn.html",
[
[
"/css/css-position/position-sticky-child-multicolumn-ref.html",
"=="
]
],
{}
]
],
"css/css-position/position-sticky-flexbox.html": [
[
"/css/css-position/position-sticky-flexbox.html",
@ -171217,6 +171229,18 @@
{}
]
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-ib-split-001.html": [
[
"/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-ib-split-001.html",
[
[
"/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-ib-split-001-ref.html",
"=="
]
],
{}
]
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-001.html": [
[
"/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-001.html",
@ -171409,6 +171433,18 @@
{}
]
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ib-split-001.html": [
[
"/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ib-split-001.html",
[
[
"/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ib-split-001-ref.html",
"=="
]
],
{}
]
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html": [
[
"/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001a.html",
@ -222588,6 +222624,11 @@
{}
]
],
"content-security-policy/navigate-to/support/delayed_frame.py": [
[
{}
]
],
"content-security-policy/navigate-to/support/form_action_navigation.sub.html": [
[
{}
@ -222648,6 +222689,26 @@
{}
]
],
"content-security-policy/navigate-to/support/spv-test-iframe1.sub.html": [
[
{}
]
],
"content-security-policy/navigate-to/support/spv-test-iframe1.sub.html.sub.headers": [
[
{}
]
],
"content-security-policy/navigate-to/support/spv-test-iframe2.sub.html": [
[
{}
]
],
"content-security-policy/navigate-to/support/spv-test-iframe3.sub.html": [
[
{}
]
],
"content-security-policy/navigate-to/support/wait_for_navigation.html": [
[
{}
@ -262343,6 +262404,11 @@
{}
]
],
"css/css-position/position-sticky-child-multicolumn-ref.html": [
[
{}
]
],
"css/css-position/position-sticky-flexbox-ref.html": [
[
{}
@ -275573,6 +275639,11 @@
{}
]
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-ib-split-001-ref.html": [
[
{}
]
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-002-ref.html": [
[
{}
@ -275638,6 +275709,11 @@
{}
]
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ib-split-001-ref.html": [
[
{}
]
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html": [
[
{}
@ -315058,6 +315134,11 @@
{}
]
],
"webaudio/the-audio-api/the-audioworklet-interface/processors/sharedarraybuffer-processor.js": [
[
{}
]
],
"webaudio/the-audio-api/the-audioworklet-interface/processors/timing-info-processor.js": [
[
{}
@ -330715,9 +330796,7 @@
"content-security-policy/navigate-to/child-navigates-parent-allowed.html": [
[
"/content-security-policy/navigate-to/child-navigates-parent-allowed.html",
{
"timeout": "long"
}
{}
]
],
"content-security-policy/navigate-to/child-navigates-parent-blocked.sub.html": [
@ -330825,9 +330904,7 @@
"content-security-policy/navigate-to/link-click-allowed.html": [
[
"/content-security-policy/navigate-to/link-click-allowed.html",
{
"timeout": "long"
}
{}
]
],
"content-security-policy/navigate-to/link-click-blocked.sub.html": [
@ -330839,33 +330916,25 @@
"content-security-policy/navigate-to/link-click-cross-origin-allowed.sub.html": [
[
"/content-security-policy/navigate-to/link-click-cross-origin-allowed.sub.html",
{
"timeout": "long"
}
{}
]
],
"content-security-policy/navigate-to/link-click-cross-origin-blocked.sub.html": [
[
"/content-security-policy/navigate-to/link-click-cross-origin-blocked.sub.html",
{
"timeout": "long"
}
{}
]
],
"content-security-policy/navigate-to/link-click-redirected-allowed.html": [
[
"/content-security-policy/navigate-to/link-click-redirected-allowed.html",
{
"timeout": "long"
}
{}
]
],
"content-security-policy/navigate-to/link-click-redirected-blocked.sub.html": [
[
"/content-security-policy/navigate-to/link-click-redirected-blocked.sub.html",
{
"timeout": "long"
}
{}
]
],
"content-security-policy/navigate-to/meta-refresh-allowed.html": [
@ -330916,6 +330985,30 @@
{}
]
],
"content-security-policy/navigate-to/spv-only-sent-to-initiator.html": [
[
"/content-security-policy/navigate-to/spv-only-sent-to-initiator.html",
{}
]
],
"content-security-policy/navigate-to/unsafe-allow-redirects/allowed-end-of-chain-because-of-same-origin.sub.html": [
[
"/content-security-policy/navigate-to/unsafe-allow-redirects/allowed-end-of-chain-because-of-same-origin.sub.html",
{}
]
],
"content-security-policy/navigate-to/unsafe-allow-redirects/allowed-end-of-chain.sub.html": [
[
"/content-security-policy/navigate-to/unsafe-allow-redirects/allowed-end-of-chain.sub.html",
{}
]
],
"content-security-policy/navigate-to/unsafe-allow-redirects/blocked-end-of-chain.sub.html": [
[
"/content-security-policy/navigate-to/unsafe-allow-redirects/blocked-end-of-chain.sub.html",
{}
]
],
"content-security-policy/navigation/javascript-url-navigation-inherits-csp.html": [
[
"/content-security-policy/navigation/javascript-url-navigation-inherits-csp.html",
@ -398398,6 +398491,12 @@
{}
]
],
"service-workers/service-worker/fetch-audio-tainting.https.html": [
[
"/service-workers/service-worker/fetch-audio-tainting.https.html",
{}
]
],
"service-workers/service-worker/fetch-canvas-tainting-image-cache.https.html": [
[
"/service-workers/service-worker/fetch-canvas-tainting-image-cache.https.html",
@ -404646,6 +404745,12 @@
{}
]
],
"webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html": [
[
"/webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html",
{}
]
],
"webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-sample-rate.https.html": [
[
"/webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-sample-rate.https.html",
@ -463714,7 +463819,7 @@
"support"
],
"content-security-policy/navigate-to/child-navigates-parent-allowed.html": [
"6c05478190f5c33b42ee87fe94d012eacaecb89c",
"7b4b455d8d4e783d6006e58d9423943efa0241df",
"testharness"
],
"content-security-policy/navigate-to/child-navigates-parent-allowed.html.headers": [
@ -463722,7 +463827,7 @@
"support"
],
"content-security-policy/navigate-to/child-navigates-parent-blocked.sub.html": [
"2acf417a3b901d6e6cdac4eded279444c6ad0cf4",
"4e50617e3c253eae90e7e4ea5094e4cbca3b5fd0",
"testharness"
],
"content-security-policy/navigate-to/child-navigates-parent-blocked.sub.html.headers": [
@ -463730,19 +463835,19 @@
"support"
],
"content-security-policy/navigate-to/form-action/form-action-allows-navigate-to-allows.html": [
"452b881829f65ba7f69cd2eb4780b6be802e4dcd",
"458373fbc01591c25a901379282a5370989b5084",
"testharness"
],
"content-security-policy/navigate-to/form-action/form-action-allows-navigate-to-blocks.html": [
"44dcc516357ce96d635ec95d3fd515dd4605811f",
"3ed4815bff6c363661ab94bdc1796067870aadab",
"testharness"
],
"content-security-policy/navigate-to/form-action/form-action-blocks-navigate-to-allows.html": [
"5e6557d9d9bb0a5f64f495b21d30a84763e3495d",
"f3f7896e932aafa137cf11b76c38246a101f4a00",
"testharness"
],
"content-security-policy/navigate-to/form-action/form-action-blocks-navigate-to-blocks.html": [
"9f9c803d53ad05a3c621159e19df762ee2e30a0a",
"08e0cbe3fb9b39f8b4945b422c5e459a2f862fb9",
"testharness"
],
"content-security-policy/navigate-to/form-allowed.html": [
@ -463750,7 +463855,7 @@
"testharness"
],
"content-security-policy/navigate-to/form-blocked.sub.html": [
"beb22214faaec7d109b6757ff85cefc846a41fba",
"72db7b8d1d584292ac3eeaef6919229d3cedf369",
"testharness"
],
"content-security-policy/navigate-to/form-cross-origin-allowed.sub.html": [
@ -463758,7 +463863,7 @@
"testharness"
],
"content-security-policy/navigate-to/form-cross-origin-blocked.sub.html": [
"49fe958adb771249198f641a926fc0404217e8eb",
"be5f70c8b1e07de9b8d7934d7427cfc445d6226f",
"testharness"
],
"content-security-policy/navigate-to/form-redirected-allowed.html": [
@ -463766,7 +463871,7 @@
"testharness"
],
"content-security-policy/navigate-to/form-redirected-blocked.sub.html": [
"6adc9efdaaf827bf2f4ee0e394619c101bdacd50",
"d60b8a7aa8d41d9498a72a60e5d3ae807d31fea2",
"testharness"
],
"content-security-policy/navigate-to/href-location-allowed.html": [
@ -463774,7 +463879,7 @@
"testharness"
],
"content-security-policy/navigate-to/href-location-blocked.sub.html": [
"6aef250eeedd1a0163fa32b000ee740e233d0d6c",
"721f055c71507ec85fea9a4d86b107fe0e91d2f7",
"testharness"
],
"content-security-policy/navigate-to/href-location-cross-origin-allowed.sub.html": [
@ -463782,7 +463887,7 @@
"testharness"
],
"content-security-policy/navigate-to/href-location-cross-origin-blocked.sub.html": [
"894719b3ac869d517b353623127666ae848af044",
"cd0cd9106dbb429e2d8ec4cbbc7c3fcb6c56aa93",
"testharness"
],
"content-security-policy/navigate-to/href-location-redirected-allowed.html": [
@ -463790,31 +463895,31 @@
"testharness"
],
"content-security-policy/navigate-to/href-location-redirected-blocked.sub.html": [
"b91c473bef4148bd8943d30fcae56d9f7dfb3df8",
"5d8fafb31313f0ec18306d4ee1c071f278a34272",
"testharness"
],
"content-security-policy/navigate-to/link-click-allowed.html": [
"667a3a59f2fafd4022f769a05e7e83d1eddcb4c3",
"977b85dfb2cbaaa4a69288e8d283c483e35eed97",
"testharness"
],
"content-security-policy/navigate-to/link-click-blocked.sub.html": [
"0ad98264c9636884ad353efa875110f9c6bea4e0",
"29686fcaeff6b57eca88ccfd599727bd2cc06464",
"testharness"
],
"content-security-policy/navigate-to/link-click-cross-origin-allowed.sub.html": [
"2f9f0e2af0ce68585a9d0f96d3afc067c5c1a75b",
"4381bcb08d6ed73abf13da54c9ccf583bd5d7523",
"testharness"
],
"content-security-policy/navigate-to/link-click-cross-origin-blocked.sub.html": [
"970f5a2d3065c66dbc650dcff0de7b1227a8e038",
"f2b106c57730c00b95cbe6cb66582c2d33dcdede",
"testharness"
],
"content-security-policy/navigate-to/link-click-redirected-allowed.html": [
"81c4f4e1677f07df0e2ab3187e8b03d5978e74c5",
"87dea95b1dc0b238b8c033b815daba960935f5d8",
"testharness"
],
"content-security-policy/navigate-to/link-click-redirected-blocked.sub.html": [
"bb61126244e5602f76d080746302bdfbb32e2ca0",
"9b9205a526a4834e8ba918e86c67710353a4ccd8",
"testharness"
],
"content-security-policy/navigate-to/meta-refresh-allowed.html": [
@ -463822,7 +463927,7 @@
"testharness"
],
"content-security-policy/navigate-to/meta-refresh-blocked.sub.html": [
"d4d52a51ccbc959694e738fb7824cc74bddd9ad8",
"1292c9ba5fc0b7bb7383e584296c29c627a87a96",
"testharness"
],
"content-security-policy/navigate-to/meta-refresh-cross-origin-allowed.sub.html": [
@ -463830,7 +463935,7 @@
"testharness"
],
"content-security-policy/navigate-to/meta-refresh-cross-origin-blocked.sub.html": [
"2118b27ba33c784066faaa5dee114fc455ea7e92",
"d7ccd336205da0087c67bc8cdb778d426f167188",
"testharness"
],
"content-security-policy/navigate-to/meta-refresh-redirected-allowed.html": [
@ -463838,11 +463943,11 @@
"testharness"
],
"content-security-policy/navigate-to/meta-refresh-redirected-blocked.sub.html": [
"55e3295ec1abc57a0ec57076b518b61c094446d3",
"0734473ee6331318a3913e6dd2ba41d52ed2c02c",
"testharness"
],
"content-security-policy/navigate-to/parent-navigates-child-allowed.html": [
"e5455ceaa275b0723b90bac2f3fcfe8f37a6591c",
"47a661157c3f9b27184cf6f391bd0c55ecb2cc72",
"testharness"
],
"content-security-policy/navigate-to/parent-navigates-child-allowed.html.headers": [
@ -463850,13 +463955,21 @@
"support"
],
"content-security-policy/navigate-to/parent-navigates-child-blocked.html": [
"fc549b47fd8b6e941ab92d4e8a0cca69afe2bd89",
"c662da95fa1b89e13c61c7b65226cb55a15d93e1",
"testharness"
],
"content-security-policy/navigate-to/parent-navigates-child-blocked.html.sub.headers": [
"6784a56c8eb5e84d9434676d2c335173c7de1970",
"support"
],
"content-security-policy/navigate-to/spv-only-sent-to-initiator.html": [
"a09057e71567efa082578541a624b9fe51e13737",
"testharness"
],
"content-security-policy/navigate-to/support/delayed_frame.py": [
"21886c7092a63b77239ba3af92194b5d185ac2d1",
"support"
],
"content-security-policy/navigate-to/support/form_action_navigation.sub.html": [
"3e3e2afcaccec7ea72f0b1b4a7afab46d8900ba3",
"support"
@ -463866,7 +463979,7 @@
"support"
],
"content-security-policy/navigate-to/support/href_location_navigation.sub.html": [
"c577e935cd43d558fcdba417606c512fdd79753e",
"15b1365cc21fbccb02fd11c9e46a067a8fa40b6f",
"support"
],
"content-security-policy/navigate-to/support/href_location_navigation.sub.html.sub.headers": [
@ -463874,7 +463987,7 @@
"support"
],
"content-security-policy/navigate-to/support/link_click_navigation.sub.html": [
"f1b42428344368f8567bb254e1fe40a7a0f87897",
"2434271211f36a456ea2bf61e717e4233a660bba",
"support"
],
"content-security-policy/navigate-to/support/link_click_navigation.sub.html.sub.headers": [
@ -463902,7 +464015,23 @@
"support"
],
"content-security-policy/navigate-to/support/redirect_to_post_message_to_frame_owner.py": [
"652f9a57b967c64630bc30203e6370ce43da0745",
"d22e9202a2a57fac314b1fee26a9a88d68db6c26",
"support"
],
"content-security-policy/navigate-to/support/spv-test-iframe1.sub.html": [
"9e26c02be3110c19b7b6f69719fc5cd9cfcf2086",
"support"
],
"content-security-policy/navigate-to/support/spv-test-iframe1.sub.html.sub.headers": [
"50d77dc7dbb24583e7e91a4e8e2128e73c69336a",
"support"
],
"content-security-policy/navigate-to/support/spv-test-iframe2.sub.html": [
"1329683c88bf584cbc63479f3ba3f6e06281f223",
"support"
],
"content-security-policy/navigate-to/support/spv-test-iframe3.sub.html": [
"09dbf6863dc7c8374fc082aa63f36690fe80a4a0",
"support"
],
"content-security-policy/navigate-to/support/wait_for_navigation.html": [
@ -463913,6 +464042,18 @@
"d3c635b9a062bba15489562293cf0ebf3d2aa0c1",
"support"
],
"content-security-policy/navigate-to/unsafe-allow-redirects/allowed-end-of-chain-because-of-same-origin.sub.html": [
"192477296b61d283d9a229ede466a4ed516e46f3",
"testharness"
],
"content-security-policy/navigate-to/unsafe-allow-redirects/allowed-end-of-chain.sub.html": [
"74fe8f2e7a673564ebf2502d07ec4136802b1537",
"testharness"
],
"content-security-policy/navigate-to/unsafe-allow-redirects/blocked-end-of-chain.sub.html": [
"86e54b3d93745d4eb892ba33074f66fa4dfa9bd9",
"testharness"
],
"content-security-policy/navigation/javascript-url-navigation-inherits-csp.html": [
"21c4fb33ce2d66db750d92a892e3871bd5d9b576",
"testharness"
@ -553138,7 +553279,7 @@
"support"
],
"css/css-paint-api/registered-property-type.https.html": [
"6ff7ce4e0af6b290ea269573c596caa364a5c1c8",
"8f02008333c9ed50091fb6605c5d4432ff0a87b4",
"reftest"
],
"css/css-paint-api/resources/html5.png": [
@ -553301,6 +553442,14 @@
"ba23f0145cf497c4d21b36f387d2017acf45bf34",
"testharness"
],
"css/css-position/position-sticky-child-multicolumn-ref.html": [
"c44f9f43eb51df8a8499a53db3d7c47d76f38829",
"support"
],
"css/css-position/position-sticky-child-multicolumn.html": [
"b5b180a4b1b85ee40120c4e2a5b2af8a02529370",
"reftest"
],
"css/css-position/position-sticky-flexbox-ref.html": [
"554ffa6d6bc9a7d76087b45649c1a69824eb2e59",
"support"
@ -553582,7 +553731,7 @@
"support"
],
"css/css-properties-values-api/typedom.tentative.html": [
"1d757df168b0db1acfdbd358951b30dbb25d3016",
"6d0623bba420dfe5becafb9eb59cbdf4ad115954",
"testharness"
],
"css/css-properties-values-api/unit-cycles.html": [
@ -586133,6 +586282,14 @@
"a8520ee2d1c81d46dac54d8fb4bcb667fa22d40f",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-ib-split-001-ref.html": [
"eb787424ed47314b50fa9a47986a68e785d346fa",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-ib-split-001.html": [
"d9f976deb8ca604315f105a339de9eac7ee48741",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-ignored-cases-no-principal-box-001.html": [
"bd2f4cb8178054e0aab0b208610e8a2ba97b1141",
"reftest"
@ -586249,6 +586406,14 @@
"d37464228658dbf60e8dfbb59ee86dcd9c9f6ad7",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ib-split-001-ref.html": [
"8a698b9d2ce2deea6b86aa667e53247f57f3d998",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-ib-split-001.html": [
"eb21a2d460957cb6fdd887c69dec4f9247bcd951",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-ignored-cases-internal-table-001-ref.html": [
"d23678941e2f0188a2cadfe06264a98ffd161bcb",
"support"
@ -586298,11 +586463,11 @@
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001-ref.html": [
"b8f983a8153bcbaf5f1de41ca41aba2cca4b9fea",
"7f13a517a6656dbe70957b0a12f3c6688d16c75e",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-block-001.html": [
"c5bdc6adead0dd31147ded92e3c2cf2db87d86e4",
"20272cff8ff20b4330a8fb987a31ef62a93358c0",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-button-001-ref.html": [
@ -586314,19 +586479,19 @@
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001-ref.html": [
"a7869752692542a724826426f026c32db6f3ae51",
"6a77ee68879cddb13bfd01ac4e9271f341d93e9c",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001.html": [
"c21e5517225e81b086ea7d24a6e8a40b787a168a",
"8cea7f5a60e71cf598ce5889df3af2dfe78bc329",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002-ref.html": [
"040da171aaf07aef505d89802ee228c645cd1626",
"31ca88312da778b688138e3313e4bde43ec93554",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-002.html": [
"18d6ad8c3c692689f30f44e64caaac0ab105ef95",
"67aa64bb271c924dd4e36fcec625053a0c4a7acf",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-flex-001-ref.html": [
@ -586346,19 +586511,19 @@
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001-ref.html": [
"56d1cdd8cee77b81d3229e6843b8a646608928ae",
"92a6c7de5ee4fdc19be842955fc413f36097cc4b",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-block-001.html": [
"48f8bc279a6a43848232fee8dcd8a57a82fedfdd",
"41458550272f896d47e15210c82f4c22d386d9e0",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001-ref.html": [
"fb013752d058a263474183b7cfb20e7d122a6841",
"93a263b5b2ffc131bdfe4989c3d90c312cadf6e4",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-inline-flex-001.html": [
"e79d0c18599f655d9ed49637fa32158ea31ef530",
"15a2c943bb65e658de58330b4cec76fbdc5294ad",
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-multicol-001-ref.html": [
@ -586394,7 +586559,7 @@
"reftest"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/reftest.list": [
"6b2e31bcd46c4dd38bbf45f2515a6bdc84128e43",
"6b872e79f2e15cdb55d9a12ea95c5d981e9ed2d0",
"support"
],
"css/vendor-imports/mozilla/mozilla-central-reftests/counter-styles-3/dependent-builtin-ref.html": [
@ -599454,15 +599619,15 @@
"support"
],
"feature-policy/picture-in-picture-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [
"c591be46479223b686f8e831c36dfd7b70d62257",
"e2b52f257a12aae267c96eab1a20cc805f007abb",
"testharness"
],
"feature-policy/picture-in-picture-allowed-by-feature-policy-attribute.https.sub.html": [
"8a0a4374b2dfed303b112121eb24decfbb9f848e",
"0c3897a4ad0f33c1cffd90f063c9d3425d506bd0",
"testharness"
],
"feature-policy/picture-in-picture-allowed-by-feature-policy.https.sub.html": [
"0f8a0c0665250a659c0452a20f0b60a951346b02",
"1ecd874c009a89241902950ac916b5cac22799eb",
"testharness"
],
"feature-policy/picture-in-picture-allowed-by-feature-policy.https.sub.html.headers": [
@ -599470,11 +599635,11 @@
"support"
],
"feature-policy/picture-in-picture-default-feature-policy.https.sub.html": [
"f47661bd7d50cd6afb66c00dec630c8b2439fed0",
"12bbf7f2f1f80fa28c43c85e028649e3bcedc896",
"testharness"
],
"feature-policy/picture-in-picture-disabled-by-feature-policy.https.sub.html": [
"2f7576b16e1355a3fe7c6e81b385386e83356335",
"b36afbda503f523d7298021ee8ea3f7a2f71a433",
"testharness"
],
"feature-policy/picture-in-picture-disabled-by-feature-policy.https.sub.html.headers": [
@ -599550,7 +599715,7 @@
"support"
],
"feature-policy/reporting/picture-in-picture-reporting.html": [
"a8a998ed2a15af10ffa6dba02273bc8d0b2d5eb4",
"60e4825d988218bda9422ec6342597823aebabef",
"testharness"
],
"feature-policy/reporting/picture-in-picture-reporting.html.headers": [
@ -599622,7 +599787,7 @@
"support"
],
"feature-policy/resources/feature-policy-picture-in-picture.html": [
"436682d8754bb5855e1bdee68a9fe5560a7f417d",
"2f33c449536d1b0253a9a1c0b52073bc500121f3",
"support"
],
"feature-policy/resources/feature-policy-usb-worker.html": [
@ -599650,7 +599815,7 @@
"support"
],
"feature-policy/resources/picture-in-picture.js": [
"e7aabcd5083355e5fd9b6300c90a7f29d07ba702",
"e245d798acfc2ebbe9e1524ec8413156b8967a84",
"support"
],
"feature-policy/resources/redirect-on-load.html": [
@ -623682,7 +623847,7 @@
"manual"
],
"mediacapture-streams/MediaStream-MediaElement-srcObject.https.html": [
"fc2e619a463c6e18433f395090fdb7a42d863cb6",
"4b9a3c8246d04aafff5877fc78001a5f9d00f82d",
"testharness"
],
"mediacapture-streams/MediaStream-add-audio-track.https.html": [
@ -634178,47 +634343,47 @@
"support"
],
"picture-in-picture/disable-picture-in-picture.html": [
"efde31bc3a30914d4e2e932a7de3522c105f5d62",
"31e0d12ad770fb9bcc8bbc2f7f86d690efe3c06d",
"testharness"
],
"picture-in-picture/enter-picture-in-picture.html": [
"9df2bfabcf272a25a6f5177c128e095f8b970427",
"a9d7b5c04899c72f91c07d614dbf7df3b37757bc",
"testharness"
],
"picture-in-picture/exit-picture-in-picture.html": [
"9a5eedd9be8f98e8d0317de7ea2cb644d353f4e1",
"c8d76f5244a41754e4a8a5b0c9fd01d056caee96",
"testharness"
],
"picture-in-picture/idlharness.window.js": [
"a7f25e3be588e876168625c254b3d5e4a79ecaba",
"31cd4a14177bccd277023a98ea5956e5f018e2e1",
"testharness"
],
"picture-in-picture/leave-picture-in-picture.html": [
"5a5182bf64d7fd6414e1e0b264759f6a53950537",
"04de95e47ecc6373fd45906b28ba88ad46f4fcc8",
"testharness"
],
"picture-in-picture/picture-in-picture-element.html": [
"809b3eeabcc30acc48d65e8d63ffcd52bf9a8e95",
"2763eca476d716aeb88bf923f32279a3bc55998a",
"testharness"
],
"picture-in-picture/picture-in-picture-window.html": [
"693a13717e2e283e25d1cb338e7310728bbd521b",
"c32787f46f771c7e8d7f689ea328f626dce70908",
"testharness"
],
"picture-in-picture/request-picture-in-picture-twice.html": [
"0924ad21a4f5eaad75b43fb19d3ad8eb2bc51e91",
"17e494bbe88b52b68a6e34e5be37a346479087e1",
"testharness"
],
"picture-in-picture/request-picture-in-picture.html": [
"403d416c7d454fb0a6a2f8442cc23c53f83212e1",
"37ae94829f3c6590ef61841c070eeffaf28e770a",
"testharness"
],
"picture-in-picture/resources/picture-in-picture-helpers.js": [
"55eed5393d62628313a558fab121230705fd85ac",
"96972dcbc8ef07aa7ea0150c4ee645507eea0856",
"support"
],
"picture-in-picture/shadow-dom.html": [
"e36acc02193c6ef10daa1ef74a511adffe5515f3",
"17816b93c94b1de504062f934437ecc090213819",
"testharness"
],
"pointerevents/META.yml": [
@ -646589,6 +646754,10 @@
"8e790d0ef5ad6d851534362de5647d96699a65f7",
"testharness"
],
"service-workers/service-worker/fetch-audio-tainting.https.html": [
"9821759bc7b311672a54387edc7d8c26a11d5e54",
"testharness"
],
"service-workers/service-worker/fetch-canvas-tainting-image-cache.https.html": [
"213238112257923657fe84a637ddd45cc0c038c5",
"testharness"
@ -659178,7 +659347,7 @@
"support"
],
"tools/wptrunner/wptrunner/testrunner.py": [
"46e3ff7926de2f2a2c86c8971e9f5a07f1f33a8a",
"2b7c091c84722c750b46d6143c74c8d329a7fd99",
"support"
],
"tools/wptrunner/wptrunner/tests/__init__.py": [
@ -663125,6 +663294,10 @@
"546bd1d0d0e34480113290bcc5008f0240be8d4a",
"testharness"
],
"webaudio/the-audio-api/the-audioworklet-interface/audioworklet-postmessage-sharedarraybuffer.https.html": [
"8194d1977ad452390efb870197057bcf48fad499",
"testharness"
],
"webaudio/the-audio-api/the-audioworklet-interface/audioworkletglobalscope-sample-rate.https.html": [
"d87e35b571d75c0ff595ab023f4a54a420111523",
"testharness"
@ -663205,6 +663378,10 @@
"5a8baf03372d25b906948dcdd6c40990eeb860fa",
"support"
],
"webaudio/the-audio-api/the-audioworklet-interface/processors/sharedarraybuffer-processor.js": [
"2ccacccd4bb0a4d289ddccd9cafa4e29a0484730",
"support"
],
"webaudio/the-audio-api/the-audioworklet-interface/processors/timing-info-processor.js": [
"714e32dbb5c1d0fbe4d0ff2ae38deaed75b4b96e",
"support"

View file

@ -71,3 +71,6 @@
[bottom intermediate]
expected: FAIL
[border-bottom-width end]
expected: FAIL

View file

@ -1,5 +1,4 @@
[fetch-in-iframe.html]
expected: CRASH
[Untitled]
expected: FAIL

View file

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

View file

@ -5,20 +5,20 @@
expected: TIMEOUT
[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: TIMEOUT
[picture: source (max-width:500px) valid image, img valid image, resize to narrow]
expected: TIMEOUT
[img (srcset 1 cand) valid image, resize to wide]
expected: FAIL
[picture: source (max-width:500px) broken image, img valid image, resize to narrow]
[picture: same URL in source (max-width:500px) and img, resize to wide]
expected: FAIL
[img (srcset 1 cand) valid image, resize to narrow]
expected: FAIL
[picture: same URL in source (max-width:500px) and img, resize to narrow]
[picture: source (max-width:500px) valid image, img broken image, resize to wide]
expected: FAIL

View file

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

View file

@ -1,283 +0,0 @@
[limited-quirks.html]
[top: -\\31 .5]
expected: FAIL
[bottom: -1A]
expected: FAIL
[bottom: -1a]
expected: FAIL
[top: @1]
expected: FAIL
[top: "1a"]
expected: FAIL
[top: @a]
expected: FAIL
[bottom: "1"]
expected: FAIL
[bottom: -/**/1]
expected: FAIL
[top: +/**/1]
expected: FAIL
[bottom: @1a]
expected: FAIL
[top: 1\\31 ]
expected: FAIL
[top: url('1')]
expected: FAIL
[bottom: -\\31 ]
expected: FAIL
[top: calc(1)]
expected: FAIL
[top: \\31 ]
expected: FAIL
[bottom: +1\\31 ]
expected: FAIL
[bottom: 1\\31 .5]
expected: FAIL
[bottom: #0001]
expected: FAIL
[top: calc(2 * 2px)]
expected: FAIL
[bottom: 1a]
expected: FAIL
[bottom: A]
expected: FAIL
[bottom: #01]
expected: FAIL
[top: +\\31 .5]
expected: FAIL
[bottom: #1]
expected: FAIL
[top: -/**/1]
expected: FAIL
[bottom: +\\31 .5]
expected: FAIL
[bottom: \\31 ]
expected: FAIL
[bottom: calc(1)]
expected: FAIL
[top: #001]
expected: FAIL
[top: +\\31 ]
expected: FAIL
[bottom: +\\31 ]
expected: FAIL
[top: +1.5]
expected: FAIL
[top: +1\\31 ]
expected: FAIL
[bottom: @a]
expected: FAIL
[bottom: @1]
expected: FAIL
[top: #1]
expected: FAIL
[top: 1a]
expected: FAIL
[bottom: +1a]
expected: FAIL
[bottom: +1A]
expected: FAIL
[bottom: "a"]
expected: FAIL
[top: #00001]
expected: FAIL
[bottom: -1\\31 .5]
expected: FAIL
[top: "1"]
expected: FAIL
[bottom: 1.5]
expected: FAIL
[bottom: -\\31 .5]
expected: FAIL
[bottom: url('1')]
expected: FAIL
[bottom: -1.5]
expected: FAIL
[top: \\31 .5]
expected: FAIL
[bottom: "1a"]
expected: FAIL
[bottom: calc(2 * 2px)]
expected: FAIL
[bottom: +1\\31 .5]
expected: FAIL
[bottom: 1\\31 ]
expected: FAIL
[bottom: +/**/1]
expected: FAIL
[bottom: #00001]
expected: FAIL
[top: url(1)]
expected: FAIL
[bottom: #001]
expected: FAIL
[top: +1\\31 .5]
expected: FAIL
[top: -1a]
expected: FAIL
[top: -1A]
expected: FAIL
[bottom: url(1)]
expected: FAIL
[top: a]
expected: FAIL
[top: A]
expected: FAIL
[top: #000001]
expected: FAIL
[top: 1]
expected: FAIL
[top: 1\\31 .5]
expected: FAIL
[bottom: a]
expected: FAIL
[bottom: 1]
expected: FAIL
[bottom: +1]
expected: FAIL
[bottom: #000001]
expected: FAIL
[bottom: +a]
expected: FAIL
[bottom: +A]
expected: FAIL
[top: 1.5]
expected: FAIL
[top: +A]
expected: FAIL
[top: +a]
expected: FAIL
[top: +1]
expected: FAIL
[top: -1.5]
expected: FAIL
[top: -1\\31 .5]
expected: FAIL
[top: +1a]
expected: FAIL
[top: +1A]
expected: FAIL
[top: @1a]
expected: FAIL
[bottom: \\31 .5]
expected: FAIL
[top: "a"]
expected: FAIL
[top: #01]
expected: FAIL
[bottom: +1.5]
expected: FAIL
[bottom: -A]
expected: FAIL
[bottom: -a]
expected: FAIL
[bottom: -1\\31 ]
expected: FAIL
[top: #0001]
expected: FAIL
[bottom: -1]
expected: FAIL
[top: -\\31 ]
expected: FAIL
[top: -A]
expected: FAIL
[top: -a]
expected: FAIL
[top: -1]
expected: FAIL
[top: -1\\31 ]
expected: FAIL

View file

@ -1,10 +1,4 @@
[urlencoded-parser.any.html]
[response.formData() with input: _charset_=windows-1252&test=%C2x]
expected: FAIL
[request.formData() with input: _charset_=windows-1252&test=%C2x]
expected: FAIL
[request.formData() with input: &&&a=b&&&&c=d&]
expected: FAIL
@ -17,17 +11,11 @@
[response.formData() with input: a=b&c=d&]
expected: FAIL
[request.formData() with input: a=b&c=d]
expected: FAIL
[urlencoded-parser.any.worker.html]
[request.formData() with input: a&b&c]
expected: FAIL
[request.formData() with input: a=b&c=d&]
expected: FAIL
[response.formData() with input: a&b&c]
expected: FAIL
@ -40,6 +28,3 @@
[request.formData() with input: a=b&c=d]
expected: FAIL
[response.formData() with input: _charset_=windows-1252&test=%C2x]
expected: FAIL

View file

@ -0,0 +1,4 @@
[audioworklet-postmessage-sharedarraybuffer.https.html]
[\n Test passing SharedArrayBuffer to an AudioWorklet\n ]
expected: FAIL

View file

@ -1,14 +1,13 @@
<!DOCTYPE html>
<head>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
var t = async_test("Test that the child can navigate the parent because the relevant policy belongs to the navigation initiator (in this case the child)");
var t = async_test("Test that the child can navigate the parent because the relevant policy belongs to the navigation initiator (in this case the child, which has the policy `navigate-to 'self'`)");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'success');
});

View file

@ -6,7 +6,14 @@
</head>
<body>
<script>
var t = async_test("Test that the child can't navigate the parent because the relevant policy belongs to the navigation initiator (in this case the child which has the policy `navigate-to 'none'`)");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
</script>
<iframe srcdoc="<iframe src='support/navigate_parent.sub.html?csp=navigate-to%20%27none%27&report_id={{$id:uuid()}}'>"></iframe>
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=navigate-to%20%27none%27&reportID={{$id}}'></script>
</body>
</body>

View file

@ -12,5 +12,5 @@
assert_equals(e.data.result, 'success');
});
</script>
<iframe src="../support/form_action_navigation.sub.html?csp=navigate-to%20%27self%27%3B%20form-action%20%27self%27%3B&action=post_message_to_frame_owner.html">
<iframe src="../support/form_action_navigation.sub.html?csp=navigate-to%20%27self%27%3B%20form-action%20%27self%27%3B&action=post_message_to_frame_owner.html&report_id=dummy">
</body>

View file

@ -12,5 +12,5 @@
assert_equals(e.data.result, 'success');
});
</script>
<iframe src="../support/form_action_navigation.sub.html?csp=navigate-to%20%27none%27%3B%20form-action%20%27self%27%3B&action=post_message_to_frame_owner.html">
<iframe src="../support/form_action_navigation.sub.html?csp=navigate-to%20%27none%27%3B%20form-action%20%27self%27%3B&action=post_message_to_frame_owner.html&report_id=dummy">
</body>

View file

@ -13,5 +13,5 @@
assert_equals(e.data.violatedDirective, 'form-action');
});
</script>
<iframe src="../support/form_action_navigation.sub.html?csp=navigate-to%20%27self%27%3B%20form-action%20%27none%27%3B&action=post_message_to_frame_owner.html">
<iframe src="../support/form_action_navigation.sub.html?csp=navigate-to%20%27self%27%3B%20form-action%20%27none%27%3B&action=post_message_to_frame_owner.html&report_id=dummy">
</body>

View file

@ -13,5 +13,5 @@
assert_equals(e.data.violatedDirective, 'form-action');
});
</script>
<iframe src="../support/form_action_navigation.sub.html?csp=navigate-to%20%27none%27%3B%20form-action%20%27none%27%3B&action=post_message_to_frame_owner.html">
<iframe src="../support/form_action_navigation.sub.html?csp=navigate-to%20%27none%27%3B%20form-action%20%27none%27%3B&action=post_message_to_frame_owner.html&report_id=dummy">
</body>

View file

@ -6,6 +6,13 @@
</head>
<body>
<script>
var t = async_test("Test that the child iframe navigation is not allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
</script>
<iframe src="support/form_action_navigation.sub.html?csp=navigate-to%20%27none%27&report_id={{$id:uuid()}}&action=post_message_to_frame_owner.html"></iframe>
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=navigate-to%20%27none%27&reportID={{$id}}'></script>

View file

@ -6,6 +6,13 @@
</head>
<body>
<script>
var t = async_test("Test that the child iframe navigation is not allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
</script>
<iframe src="support/form_action_navigation.sub.html?csp=navigate-to%20%27self%27&report_id={{$id:uuid()}}&action=http%3A%2F%2F{{domains[www1]}}:{{ports[http][0]}}%2Fcontent-security-policy%2Fnavigate-to%2Fsupport%2Fpost_message_to_frame_owner.html"></iframe>
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=navigate-to%20%27self%27&reportID={{$id}}'></script>

View file

@ -6,6 +6,14 @@
</head>
<body>
<script>
var t = async_test("Test that the child iframe navigation is not allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
</script>
<iframe src="support/form_action_navigation.sub.html?csp=navigate-to%20%27self%27&report_id={{$id:uuid()}}&action=redirect_to_post_message_to_frame_owner.py%3Flocation%3Dhttp%3A%2F%2F{{domains[www1]}}%3A{{ports[http][0]}}%2Fcontent-security-policy%2Fnavigate-to%2Fsupport%2Fpost_message_to_frame_owner.html"></iframe>
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=navigate-to%20%27self%27&reportID={{$id}}'></script>

View file

@ -7,6 +7,12 @@
<body>
<script>
var t = async_test("Test that the child iframe navigation is not allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
window.open("support/href_location_navigation.sub.html?csp=navigate-to%20%27none%27&report_id={{$id:uuid()}}&target=post_message_to_frame_owner.html", "_blank");
</script>

View file

@ -7,6 +7,12 @@
<body>
<script>
var t = async_test("Test that the child iframe navigation is not allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
window.open("support/href_location_navigation.sub.html?csp=navigate-to%20%27self%27&report_id={{$id:uuid()}}&target=http%3A%2F%2F{{domains[www1]}}:{{ports[http][0]}}%2Fcontent-security-policy%2Fnavigate-to%2Fsupport%2Fpost_message_to_frame_owner.html", "_blank");
</script>

View file

@ -7,6 +7,12 @@
<body>
<script>
var t = async_test("Test that the child iframe navigation is not allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
window.open("support/href_location_navigation.sub.html?csp=navigate-to%20%27self%27&report_id={{$id:uuid()}}&target=redirect_to_post_message_to_frame_owner.py%3Flocation%3Dhttp%3A%2F%2F{{domains[www1]}}%3A{{ports[http][0]}}%2Fcontent-security-policy%2Fnavigate-to%2Fsupport%2Fpost_message_to_frame_owner.html", "_blank");
</script>

View file

@ -1,7 +1,6 @@
<!DOCTYPE html>
<head>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>

View file

@ -6,7 +6,14 @@
</head>
<body>
<script>
var t = async_test("Test that the child iframe navigation is not allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
</script>
<iframe src="support/link_click_navigation.sub.html?csp=navigate-to%20%27none%27&report_id={{$id:uuid()}}&target=post_message_to_frame_owner.html"></iframe>
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=navigate-to%20%27none%27&reportID={{$id}}'></script>
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=navigate-to%20%27self%27&reportID={{$id}}'></script>
</body>

View file

@ -1,7 +1,6 @@
<!DOCTYPE html>
<head>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>

View file

@ -1,12 +1,19 @@
<!DOCTYPE html>
<head>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
var t = async_test("Test that the child iframe navigation is not allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
</script>
<iframe src="support/link_click_navigation.sub.html?csp=navigate-to%20%27self%27&report_id={{$id:uuid()}}&target=http%3A%2F%2F{{domains[www1]}}:{{ports[http][0]}}%2Fcontent-security-policy%2Fnavigate-to%2Fsupport%2Fpost_message_to_frame_owner.html"></iframe>
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=navigate-to%20%27self%27&reportID={{$id}}'></script>

View file

@ -1,7 +1,6 @@
<!DOCTYPE html>
<head>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>

View file

@ -1,12 +1,18 @@
<!DOCTYPE html>
<head>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
var t = async_test("Test that the child iframe navigation is not allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
</script>
<iframe src="support/link_click_navigation.sub.html?csp=navigate-to%20%27self%27&report_id={{$id:uuid()}}&target=redirect_to_post_message_to_frame_owner.py%3Flocation%3Dhttp%3A%2F%2F{{domains[www1]}}%3A{{ports[http][0]}}%2Fcontent-security-policy%2Fnavigate-to%2Fsupport%2Fpost_message_to_frame_owner.html"></iframe>
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=navigate-to%20%27self%27&reportID={{$id}}'></script>

View file

@ -6,6 +6,14 @@
</head>
<body>
<script>
var t = async_test("Test that the child iframe navigation is not allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
</script>
<iframe src="support/meta_refresh_navigation.sub.html?csp=navigate-to%20%27none%27&report_id={{$id:uuid()}}&target=post_message_to_frame_owner.html"></iframe>
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=navigate-to%20%27none%27&reportID={{$id}}'></script>

View file

@ -6,6 +6,14 @@
</head>
<body>
<script>
var t = async_test("Test that the child iframe navigation is not allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
</script>
<iframe src="support/meta_refresh_navigation.sub.html?csp=navigate-to%20%27self%27&report_id={{$id:uuid()}}&target=http%3A%2F%2F{{domains[www1]}}:{{ports[http][0]}}%2Fcontent-security-policy%2Fnavigate-to%2Fsupport%2Fpost_message_to_frame_owner.html"></iframe>
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=navigate-to%20%27self%27&reportID={{$id}}'></script>

View file

@ -6,6 +6,14 @@
</head>
<body>
<script>
var t = async_test("Test that the child iframe navigation is not allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
</script>
<iframe src="support/meta_refresh_navigation.sub.html?csp=navigate-to%20%27self%27&report_id={{$id:uuid()}}&target=redirect_to_post_message_to_frame_owner.py%3Flocation%3Dhttp%3A%2F%2F{{domains[www1]}}%3A{{ports[http][0]}}%2Fcontent-security-policy%2Fnavigate-to%2Fsupport%2Fpost_message_to_frame_owner.html"></iframe>
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=navigate-to%20%27self%27&reportID={{$id}}'></script>

View file

@ -7,7 +7,7 @@
<body>
<script>
var t = async_test("Test that the parent can navigate the child because the relevant policy belongs to the navigation initiator (in this case the parent)");
var t = async_test("Test that the parent can navigate the child because the relevant policy belongs to the navigation initiator (in this case the parent, which has the policy `navigate-to 'self'`)");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'success');
});
@ -23,4 +23,4 @@
i.src = "support/wait_for_navigation.html?csp=navigate-to%20%none%27";
document.body.appendChild(i);
</script>
</body>
</body>

View file

@ -7,6 +7,12 @@
<body>
<script>
var t = async_test("Test that the parent can't navigate the child because the relevant policy belongs to the navigation initiator (in this case the parent, which has the policy `navigate-to support/wait_for_navigation.html;`)");
window.onmessage = t.unreached_func("Should not have received a message as the navigation should not have been successful");
window.addEventListener('securitypolicyviolation', t.step_func_done(function(e) {
assert_equals(e.violatedDirective, 'navigate-to');
}));
var i = document.createElement('iframe');
var src_changed = false;
i.onload = function() {
@ -17,5 +23,6 @@
i.src = "support/wait_for_navigation.html?csp=navigate-to%20%27self%27";
document.body.appendChild(i);
</script>
<script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=navigate-to%20support%2Fwait_for_navigation.html'></script>
</body>
</body>

View file

@ -0,0 +1,48 @@
<!DOCTYPE html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<!-- This tests that a navigation initiator that has been replaced by the time
the navigation it initiates is blocked, will not receive the SPV event.
An iframe will navigate another iframe and the navigate itself.
The second iframe's navigation response will be delayed by the server but will
eventually be blocked by the CSP of the first iframe.
By the time this happens the first iframe should be an entirely different
document and it should not receive a SPV event -->
<script>
var t = async_test("Test that no spv event is raised");
window.onmessage = t.step_func(function(e) {
if (e.data == "end_test") t.done();
else assert_unreached("Should not have raised a spv event");
});
var frames_loaded_count = 0;
var frame_loaded = function() {
if (++frames_loaded_count == 2) {
// both child frame have loaded we can start the
// test now, send a message to iframe1 so it knows to start
document.getElementById('iframe1').contentWindow.postMessage('start_test', '*');
}
}
var i1 = document.createElement('iframe');
i1.src = "support/spv-test-iframe1.sub.html?report_id={{$id:uuid()}}";
i1.id = "iframe1";
i1.name = "iframe1";
i1.onload = frame_loaded;
document.body.appendChild(i1);
var i2 = document.createElement('iframe');
i2.src = "support/spv-test-iframe2.sub.html";
i2.id = "iframe2";
i2.name = "iframe2";
i2.onload = frame_loaded;
document.body.appendChild(i2);
</script>
<script async defer src='../support/checkReport.sub.js?reportExists=false&reportID={{$id}}'></script>
</body>

View file

@ -0,0 +1,12 @@
import time
def main(request, response):
time.sleep(1)
headers = [("Content-Type", "text/html")]
return headers, '''
<!DOCTYPE html>
<head>
</head>
<body>
DELAYED FRAME
</body
'''

View file

@ -6,6 +6,10 @@
<body>
<script>
window.addEventListener('securitypolicyviolation', function(e) {
opener.postMessage({result: 'fail', violatedDirective: e.violatedDirective}, '*');
});
try {
location.href = "{{GET[target]}}";
} catch(ex) {}

View file

@ -7,6 +7,10 @@
<body>
<a href="{{GET[target]}}" id="link">dummy link</a>
<script>
window.addEventListener('securitypolicyviolation', function(e) {
top.postMessage({result: 'fail', violatedDirective: e.violatedDirective}, '*');
});
document.getElementById('link').click();
</script>
</body>

View file

@ -3,4 +3,4 @@ def main(request, response):
if "location" in request.GET:
response.headers.set("Location", request.GET["location"])
else:
response.headers.set("Location", "post_message_to_frame_owner.html")
response.headers.set("Location", "post_message_to_frame_owner.html")

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<head>
<script>
window.onmessage = function(e) {
if (e.data == "start_test") {
document.getElementById('link').click();
location.href = "{{location[server]}}/content-security-policy/navigate-to/support/spv-test-iframe3.sub.html";
}
}
window.addEventListener('securitypolicyviolation', function(e) {
top.postMessage({iframe: 'iframe1', violatedDirective: e.violatedDirective}, '*');
});
</script>
</head>
<body>
<a href="{{location[server]}}/content-security-policy/navigate-to/support/delayed_frame.py" id="link" target="iframe2">dummy link</a>
IFRAME 1
</body>

View file

@ -0,0 +1,4 @@
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Security-Policy: navigate-to {{location[server]}}/content-security-policy/navigate-to/support/spv-test-iframe3.sub.html 'unsafe-allow-redirects'; report-uri /content-security-policy/support/report.py?op=put&reportID={{GET[report_id]}}

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<head>
</head>
<body>
<script>
window.addEventListener('securitypolicyviolation', function(e) {
top.postMessage({iframe: 'iframe1', violatedDirective: e.violatedDirective}, '*');
});
setTimeout(function() {
top.postMessage("end_test", "*");
}, 4000);
</script>
IFRAME 2
</body>

View file

@ -0,0 +1,12 @@
<!DOCTYPE html>
<head>
<script>
window.addEventListener('securitypolicyviolation', function(e) {
top.postMessage({iframe: 'iframe3', violatedDirective: e.violatedDirective}, '*');
});
</script>
</head>
<body>
IFRAME 3
</body>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
var t = async_test("Test that the child iframe navigation is allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'success');
});
// the iframe will navigate to:
// [www2]/..../redirect.py (which is not in the navigate-to source list) which will in turn navigate to
// [www1]/..../post_message_to_frame_owner.html which is not exactly in
// the list but the check should be reduced to an origin check since there has been a redirect.
// Because of 'unsafe-allow-redirects' only the second one is checked since the first is a redirect
var i = document.createElement('iframe');
i.src = "../support/link_click_navigation.sub.html" +
"?csp=" + encodeURIComponent("navigate-to {{location[scheme]}}://{{domains[www1]}}:{{location[port]}}/some-path/ 'unsafe-allow-redirects'") +
"&target=" + encodeURIComponent("{{location[scheme]}}://{{domains[www2]}}:{{location[port]}}/common/redirect.py?location=" +
encodeURIComponent("{{location[scheme]}}://{{domains[www1]}}:{{location[port]}}/content-security-policy/navigate-to/support/post_message_to_frame_owner.html"));
document.body.appendChild(i);
</script>
</body>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
var t = async_test("Test that the child iframe navigation is allowed");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'success');
});
// the iframe will navigate to:
// [www2]/..../redirect.py (which is not in the navigate-to source list) which will in turn navigate to
// [www1]/..../post_message_to_frame_owner.html which is in the list
// because of 'unsafe-allow-redirects' only the second one is checked since the first is a redirect
var i = document.createElement('iframe');
i.src = "../support/link_click_navigation.sub.html" +
"?csp=" + encodeURIComponent("navigate-to {{location[scheme]}}://{{domains[www1]}}:{{location[port]}} 'unsafe-allow-redirects'") +
"&target=" + encodeURIComponent("{{location[scheme]}}://{{domains[www2]}}:{{location[port]}}/common/redirect.py?location=" +
encodeURIComponent("{{location[scheme]}}://{{domains[www1]}}:{{location[port]}}/content-security-policy/navigate-to/support/post_message_to_frame_owner.html"));
document.body.appendChild(i);
</script>
</body>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
var t = async_test("Test that the child iframe navigation is blocked");
window.onmessage = t.step_func_done(function(e) {
assert_equals(e.data.result, 'fail');
assert_equals(e.data.violatedDirective, 'navigate-to');
});
// the iframe will navigate to:
// [www2]/..../redirect.py (which is not in the navigate-to source list) which will in turn navigate to
// [www2]/..../post_message_to_frame_owner.html which is also not in the list
// because of 'unsafe-allow-redirects' only the second one is checked since the first is a redirect
var i = document.createElement('iframe');
i.src = "../support/link_click_navigation.sub.html" +
"?csp=" + encodeURIComponent("navigate-to {{location[scheme]}}://{{domains[www1]}}:{{location[port]}} 'unsafe-allow-redirects'") +
"&target=" + encodeURIComponent("{{location[scheme]}}://{{domains[www2]}}:{{location[port]}}/common/redirect.py?location=" +
encodeURIComponent("{{location[scheme]}}://{{domains[www2]}}:{{location[port]}}/content-security-policy/navigate-to/support/post_message_to_frame_owner.html"));
document.body.appendChild(i);
</script>
</body>

View file

@ -27,16 +27,42 @@
paint(ctx, geom, styleMap) {
ctx.strokeStyle = 'green';
for (let prop of props) {
let first = styleMap.get(prop.name);
let all = styleMap.getAll(prop.name);
// Read values using get, getAll and iterator:
let valueFromGet = styleMap.get(prop.name);
let valueFromGetAll = styleMap.getAll(prop.name);
let valueFromIterator = Array.from(styleMap).filter(e => e[0] == prop.name)[0][1];
// Serialize 'actual'-values for all three cases:
let serialize = v => v.constructor.name + '=' + v.toString()
let actual = all.map(serialize).join(',');
let expected = prop.expected.join(',');
let pass = actual === expected
&& serialize(first) === prop.expected[0];
let actualFromGet = serialize(valueFromGet);
let actualFromGetAll = valueFromGetAll.map(serialize).join(',');
let actualFromIterator = valueFromIterator.map(serialize).join(',');
// Create 'expected'-values for all three cases:
let expectedForGet = prop.expected[0];
let expectedForGetAll = prop.expected.join(',');
let expectedForIterator = expectedForGetAll;
let pass = true;
// Assertions:
if (actualFromGet !== expectedForGet) {
debugLog(`FAIL: StylePropertyMap.get: actual: ${actualFromGet} expected: ${expectedForGet}`);
pass = false;
}
if (actualFromGetAll !== expectedForGetAll) {
debugLog(`FAIL: StylePropertyMap.getAll: actual: ${actualFromGetAll} expected: ${expectedForGetAll}`);
pass = false;
}
if (actualFromIterator !== expectedForIterator) {
debugLog(`FAIL: StylePropertyMap iterator: actual: ${actualFromIterator} expected: ${expectedForIterator}`);
pass = false;
}
if (!pass)
ctx.strokeStyle = 'red';
debugLog(pass ? 'PASS' : 'FAIL', prop.syntax, actual, expected);
else
debugLog('PASS', prop.syntax, actualFromGetAll, expectedForGetAll);
}
ctx.lineWidth = 4;
ctx.strokeRect(0, 0, geom.width, geom.height);

View file

@ -0,0 +1,50 @@
<!DOCTYPE html>
<title>Reference for multicolumn under position:sticky should be positioned correctly</title>
<style>
body {
margin: 0;
}
#scroller {
overflow-y: scroll;
width: 200px;
height: 200px;
}
#relative {
position: relative;
top: 100px;
margin: 10px;
}
#child {
width: 100px;
height: 100px;
background: green;
}
#contents {
position: relative;
top: 10%;
left: 10%;
width: 80%;
height: 80%;
background: lightgreen;
}
#spacer {
height: 400px;
}
</style>
<div id="scroller">
<div id="relative">
<div id="child">
<div id="contents"></div>
</div>
</div>
<div id="spacer"></div>
</div>
<div>You should see a light green box above with a dark green border.</div>
<script>
window.addEventListener('load', function() {
scroller.scrollTop = 100;
});
</script>

View file

@ -0,0 +1,55 @@
<!DOCTYPE html>
<title>Multicolumn under position:sticky should be positioned correctly</title>
<link rel="help" href="https://www.w3.org/TR/css-position-3/#sticky-pos" />
<link rel="match" href="position-sticky-child-multicolumn-ref.html" />
<link rel="author" title="Philip Rogers" href="mailto:pdr@chromium.org" />
<meta name="assert" content="This test checks that a multicolumn element is positioned relative to a sticky position" />
<style>
body {
margin: 0;
}
#scroller {
overflow-y: scroll;
width: 200px;
height: 200px;
}
#sticky {
position: sticky;
top: 10px;
margin: 10px;
}
#multicolumn {
width: 100px;
height: 100px;
background: green;
columns: 1;
}
#contents {
margin-left: 10%;
margin-top: 10%;
width: 80%;
height: 80%;
background: lightgreen;
}
#spacer {
height: 400px;
}
</style>
<div id="scroller">
<div id="sticky">
<div id="multicolumn">
<div id="contents"></div>
</div>
</div>
<div id="spacer"></div>
</div>
<div>You should see a light green box above with a dark green border.</div>
<script>
window.addEventListener('load', function() {
scroller.scrollTop = 100;
});
</script>

View file

@ -33,6 +33,13 @@ function gen_prop(syntax, initialValue) {
return name;
}
// Cleans style rules used for testing between every test.
add_result_callback(function(){
target.attributeStyleMap.clear();
// Clears 'div' rule in #style:
style.sheet.rules[0].styleMap.clear();
});
// On the target element, verify that computed value of 'name' is an instance
// of 'expected' and not an instance of CSSUnparsedValue.
//
@ -594,4 +601,124 @@ test(function(){
}
}, 'Direct CSSStyleValue instances are tied to their associated property');
// StylePropertyMapReadOnly iteration
test(function(){
let name = gen_prop('<length>', '10px');
let result = Array.from(target.computedStyleMap()).filter(e => e[0] == name)[0];
assert_true(typeof(result) !== 'undefined');
}, 'Registered property with initial value show up on iteration of computedStyleMap');
// Verifies that iterating a StylePropertyMap[ReadOnly] yields correctly
// typed objects for a given syntax/value.
function test_iteration_type_for_property_map(propertyMapName, propertyMap, options) {
test(function(){
let name = gen_prop(options.syntax, options.initialValue);
if (propertyMap instanceof StylePropertyMap) {
// Only set the value if the propertyMap is mutable.
propertyMap.set(name, options.value);
}
let result = Array.from(propertyMap).filter(e => e[0] == name)[0];
let value = result[1];
assert_true(options.expect(value));
}, `Iteration on ${propertyMapName} produces correct type for ${options.syntax}`);
}
function test_iteration_type(options) {
test_iteration_type_for_property_map('computedStyleMap', target.computedStyleMap(), options);
test_iteration_type_for_property_map('attributeStyleMap', target.attributeStyleMap, options);
test_iteration_type_for_property_map('styleMap', style.sheet.rules[0].styleMap, options);
}
test_iteration_type({
syntax: '*',
initialValue: 'none',
value: 'thing',
expect: v => v.length == 1 && v[0] instanceof CSSUnparsedValue,
});
test_iteration_type({
syntax: '<angle>',
initialValue: '0deg',
value: '42deg',
expect: v => v.length == 1 && v[0] instanceof CSSUnitValue,
});
test_iteration_type({
syntax: '<custom-ident>',
initialValue: 'none',
value: 'thing',
expect: v => v.length == 1 && v[0] instanceof CSSKeywordValue,
});
test_iteration_type({
syntax: '<image>',
initialValue: 'url(a)',
value: 'url(b)',
expect: v => v.length == 1 && v[0] instanceof CSSImageValue,
});
test_iteration_type({
syntax: '<integer>',
initialValue: '0',
value: '100',
expect: v => v.length == 1 && v[0] instanceof CSSUnitValue,
});
test_iteration_type({
syntax: '<length>',
initialValue: '0px',
value: '10px',
expect: v => v.length == 1 && v[0] instanceof CSSUnitValue,
});
test_iteration_type({
syntax: '<number>',
initialValue: '0',
value: '42',
expect: v => v.length == 1 && v[0] instanceof CSSUnitValue,
});
test_iteration_type({
syntax: '<percentage>',
initialValue: '0%',
value: '10%',
expect: v => v.length == 1 && v[0] instanceof CSSUnitValue,
});
test_iteration_type({
syntax: '<resolution>',
initialValue: '0dpi',
value: '300dpi',
expect: v => v.length == 1 && v[0] instanceof CSSUnitValue,
});
test_iteration_type({
syntax: '<time>',
initialValue: '0s',
value: '10s',
expect: v => v.length == 1 && v[0] instanceof CSSUnitValue,
});
test_iteration_type({
syntax: '<url>',
initialValue: 'url(a)',
value: 'url(b)',
expect: v => v.length == 1 && v[0].constructor === CSSStyleValue,
});
test_iteration_type({
syntax: 'none | thing | THING',
initialValue: 'none',
value: 'THING',
expect: v => v.length == 1 && v[0] instanceof CSSKeywordValue,
});
test_iteration_type({
syntax: '<angle> | <length>',
initialValue: '0deg',
value: '10px',
expect: v => v.length == 1 && v[0] instanceof CSSUnitValue,
});
</script>

View file

@ -0,0 +1,76 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Reftest Reference</title>
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
<style>
.abspos-box {
position: absolute;
width: 200px;
height: 200px;
}
/* The boxes should stack in the order that I've listed their CSS classes
here. The class names' first word (outside/before/inside/after) refers
to the boxes' DOM position, and "background"/"midground"/"foreground"
refers to their z-index values. */
.before-IB-background {
background: darkmagenta;
z-index: -1;
top: 50px;
left: 50px;
}
.after-IB-background {
background: magenta;
z-index: -1;
top: 70px;
left: 70px;
}
.outside-span-midground {
background: darkkhaki;
top: 90px;
left: 90px;
}
.inside-IB-midground {
background: khaki;
top: 110px;
left: 110px;
}
.before-IB-foreground {
background: darkcyan;
z-index: 1;
top: 130px;
left: 130px;
}
.after-IB-foreground {
background: cyan;
z-index: 1;
top: 150px;
left: 150px;
}
</style>
</head>
<body>
<!-- The expectation here is that 'abspos-box' elements will all interact in
the same top-level stacking context. That means the box ordering should
be (back to front): darkmagenta/magenta/darkkhaki/khaki/darkcyan/cyan,
with the boxes stacked (visually) from top-left to bottom-right. -->
<div class="abspos-box outside-span-midground"></div>
<!-- Note: this file is identical to the testcase,
except for the lack of "contain: layout" on this span. -->
<span>
<div class="abspos-box before-IB-background"></div>
<div class="abspos-box before-IB-foreground"></div>
<!-- This unstyled div crates the IB split: -->
<div>
<div class="abspos-box inside-IB-midground"></div>
</div>
<div class="abspos-box after-IB-background"></div>
<div class="abspos-box after-IB-foreground"></div>
</span>
</body>
</html>

View file

@ -0,0 +1,77 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Test: 'contain: layout' should have no effect on non-atomic inline
(including its block part, if there's a block-in-inline split)</title>
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
<link rel="help" href="https://drafts.csswg.org/css-contain/#containment-layout">
<link rel="match" href="contain-layout-ignored-cases-ib-split-001-ref.html">
<style>
.abspos-box {
position: absolute;
width: 200px;
height: 200px;
}
/* The boxes should stack in the order that I've listed their CSS classes
here. The class names' first word (outside/before/inside/after) refers
to the boxes' DOM position, and "background"/"midground"/"foreground"
refers to their z-index values. */
.before-IB-background {
background: darkmagenta;
z-index: -1;
top: 50px;
left: 50px;
}
.after-IB-background {
background: magenta;
z-index: -1;
top: 70px;
left: 70px;
}
.outside-span-midground {
background: darkkhaki;
top: 90px;
left: 90px;
}
.inside-IB-midground {
background: khaki;
top: 110px;
left: 110px;
}
.before-IB-foreground {
background: darkcyan;
z-index: 1;
top: 130px;
left: 130px;
}
.after-IB-foreground {
background: cyan;
z-index: 1;
top: 150px;
left: 150px;
}
</style>
</head>
<body>
<!-- The expectation here is that 'abspos-box' elements will all interact in
the same top-level stacking context. That means the box ordering should
be (back to front): darkmagenta/magenta/darkkhaki/khaki/darkcyan/cyan,
with the boxes stacked (visually) from top-left to bottom-right. -->
<div class="abspos-box outside-span-midground"></div>
<span style="contain: layout">
<div class="abspos-box before-IB-background"></div>
<div class="abspos-box before-IB-foreground"></div>
<!-- This unstyled div crates the IB split: -->
<div>
<div class="abspos-box inside-IB-midground"></div>
</div>
<div class="abspos-box after-IB-background"></div>
<div class="abspos-box after-IB-foreground"></div>
</span>
</body>
</html>

View file

@ -0,0 +1,76 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Reftest Reference</title>
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
<style>
.abspos-box {
position: absolute;
width: 200px;
height: 200px;
}
/* The boxes should stack in the order that I've listed their CSS classes
here. The class names' first word (outside/before/inside/after) refers
to the boxes' DOM position, and "background"/"midground"/"foreground"
refers to their z-index values. */
.before-IB-background {
background: darkmagenta;
z-index: -1;
top: 50px;
left: 50px;
}
.after-IB-background {
background: magenta;
z-index: -1;
top: 70px;
left: 70px;
}
.outside-span-midground {
background: darkkhaki;
top: 90px;
left: 90px;
}
.inside-IB-midground {
background: khaki;
top: 110px;
left: 110px;
}
.before-IB-foreground {
background: darkcyan;
z-index: 1;
top: 130px;
left: 130px;
}
.after-IB-foreground {
background: cyan;
z-index: 1;
top: 150px;
left: 150px;
}
</style>
</head>
<body>
<!-- The expectation here is that 'abspos-box' elements will all interact in
the same top-level stacking context. That means the box ordering should
be (back to front): darkmagenta/magenta/darkkhaki/khaki/darkcyan/cyan,
with the boxes stacked (visually) from top-left to bottom-right. -->
<div class="abspos-box outside-span-midground"></div>
<!-- Note: this file is identical to the testcase,
except for the lack of "contain: paint" on this span. -->
<span>
<div class="abspos-box before-IB-background"></div>
<div class="abspos-box before-IB-foreground"></div>
<!-- This unstyled div crates the IB split: -->
<div>
<div class="abspos-box inside-IB-midground"></div>
</div>
<div class="abspos-box after-IB-background"></div>
<div class="abspos-box after-IB-foreground"></div>
</span>
</body>
</html>

View file

@ -0,0 +1,77 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Test: 'contain: paint' should have no effect on non-atomic inline
(including its block part, if there's a block-in-inline split)</title>
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
<link rel="help" href="https://drafts.csswg.org/css-contain/#containment-paint">
<link rel="match" href="contain-paint-ignored-cases-ib-split-001-ref.html">
<style>
.abspos-box {
position: absolute;
width: 200px;
height: 200px;
}
/* The boxes should stack in the order that I've listed their CSS classes
here. The class names' first word (outside/before/inside/after) refers
to the boxes' DOM position, and "background"/"midground"/"foreground"
refers to their z-index values. */
.before-IB-background {
background: darkmagenta;
z-index: -1;
top: 50px;
left: 50px;
}
.after-IB-background {
background: magenta;
z-index: -1;
top: 70px;
left: 70px;
}
.outside-span-midground {
background: darkkhaki;
top: 90px;
left: 90px;
}
.inside-IB-midground {
background: khaki;
top: 110px;
left: 110px;
}
.before-IB-foreground {
background: darkcyan;
z-index: 1;
top: 130px;
left: 130px;
}
.after-IB-foreground {
background: cyan;
z-index: 1;
top: 150px;
left: 150px;
}
</style>
</head>
<body>
<!-- The expectation here is that 'abspos-box' elements will all interact in
the same top-level stacking context. That means the box ordering should
be (back to front): darkmagenta/magenta/darkkhaki/khaki/darkcyan/cyan,
with the boxes stacked (visually) from top-left to bottom-right. -->
<div class="abspos-box outside-span-midground"></div>
<span style="contain: paint">
<div class="abspos-box before-IB-background"></div>
<div class="abspos-box before-IB-foreground"></div>
<!-- This unstyled div crates the IB split: -->
<div>
<div class="abspos-box inside-IB-midground"></div>
</div>
<div class="abspos-box after-IB-background"></div>
<div class="abspos-box after-IB-foreground"></div>
</span>
</body>
</html>

View file

@ -26,6 +26,11 @@
display: flex;
align-items: baseline;
}
.innerContents {
color: transparent;
width: 0;
height: 0;
}
</style>
</head>
<body>
@ -51,7 +56,7 @@
<br>
<div class="flexBaselineCheck">
outside before<div class="basic"></div>outside after
outside before<div class="basic innerContents">i</div>outside after
</div>
</body>
</html>

View file

@ -73,7 +73,7 @@
<div class="contain floatLWidth"><div class="innerContents">inner</div></div>
<br>
<!--CSS Test: A size-contained block element should perform baseline alignment as if the container were empty.-->
<!--CSS Test: A size-contained block element should perform baseline alignment regularly.-->
<div class="flexBaselineCheck">
outside before<div class="contain"><div class="innerContents">inner</div></div>outside after
</div>

View file

@ -12,6 +12,7 @@
.container {
border: 10px solid green;
display: inline-block;
vertical-align: top;
}
.height {
height: 30px;

View file

@ -16,6 +16,7 @@
.container {
border: 10px solid green;
display: inline-block;
vertical-align: top;
}
.innerContents {
height: 50px;

View file

@ -24,11 +24,23 @@
display: flex;
align-items: baseline;
}
fieldset {
border: none;
color: transparent;
}
legend, .innerContents {
width: 0;
height: 0;
padding: 0;
}
</style>
</head>
<body>
<div class="flexBaselineCheck">
outside before<fieldset class="basic"></fieldset>outside after
outside before<fieldset class="basc">
<legend>l</legend>
<div class="innerContents">i</div>
</fieldset>outside after
</div>
</body>
</html>

View file

@ -2,7 +2,7 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS Test: 'contain: size' on fieldset elements should cause them to be baseline-aligned as if they had no contents.</title>
<title>CSS Test: 'contain: size' on fieldset elements shouldn't prevent them from being baseline-aligned regularly.</title>
<link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
<link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
<link rel="match" href="contain-size-fieldset-002-ref.html">
@ -24,7 +24,7 @@
</style>
</head>
<body>
<!--CSS Test: A size-contained fieldset element should perform baseline alignment as if the container were empty.-->
<!--CSS Test: A size-contained fieldset element should perform baseline alignment regularly.-->
<div class="flexBaselineCheck">
outside before<fieldset class="contain">
<legend>legend</legend>

View file

@ -15,24 +15,29 @@
.width-ref {
width: 50px;
}
.innerContents {
color: transparent;
width: 0;
height: 0;
}
</style>
</head>
<body>
<div class="basic"></div>
<div class="basic"><div class="innerContents">i</div></div>
<br>
outside before<div class="basic"></div>outside after
outside before<div class="basic"><div class="innerContents">i</div></div>outside after
<br>
<div class="basic height-ref"></div>
<div class="basic height-ref"><div class="innerContents">i</div></div>
<br>
<div class="basic height-ref"></div>
<div class="basic height-ref"><div class="innerContents">i</div></div>
<br>
<div class="basic width-ref"></div>
<div class="basic width-ref"><div class="innerContents">i</div></div>
<br>
<div class="basic width-ref"></div>
<div class="basic width-ref"><div class="innerContents">i</div></div>
</body>
</html>

View file

@ -2,7 +2,7 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS Test: 'contain: size' on inline-block elements should cause them to be sized and baseline-aligned as if they had no contents.</title>
<title>CSS Test: 'contain: size' on inline-block elements should cause them to be sized as if they had no contents and baseline-aligned regularly.</title>
<link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
<link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
<link rel="match" href="contain-size-inline-block-001-ref.html">
@ -37,7 +37,7 @@
<div class="contain"><div class="innerContents">inner</div></div>
<br>
<!--CSS Test: A size-contained inline-block element should perform baseline alignment as if the container were empty.-->
<!--CSS Test: A size-contained inline-block element should perform baseline alignment regularly.-->
outside before<div class="contain"><div class="innerContents">inner</div></div>outside after
<br>

View file

@ -12,12 +12,17 @@
.width-ref {
width: 50px;
}
.innerContents {
color: transparent;
width: 0;
height: 0;
}
</style>
</head>
<body>
aa<div class="basic"></div>bb
aa<div class="basic"><div class="innerContents">i</div></div>bb
<br>
aa<div class="basic width-ref"></div>bb
aa<div class="basic width-ref"><div class="innerContents">i</div></div>bb
</body>
</html>

View file

@ -2,7 +2,7 @@
<html>
<head>
<meta charset="utf-8">
<title>CSS Test: 'contain: size' on inline-flex elements should cause them to be sized and baseline-aligned as if they had no contents.</title>
<title>CSS Test: 'contain: size' on inline-flex elements should cause them to be sized as if they had no contents and baseline-aligned regularly.</title>
<link rel="author" title="Morgan Rae Reschenberg" href="mailto:mreschenberg@berkeley.edu">
<link rel="help" href="https://drafts.csswg.org/css-contain/#containment-size">
<link rel="match" href="contain-size-inline-flex-001-ref.html">
@ -24,11 +24,11 @@
</style>
</head>
<body>
<!--CSS Test: A size-contained inline-flex element without dimensions should ensure baseline alignment behaviour matches that of an empty object of the same type.-->
<!--CSS Test: A size-contained inline-flex element without dimensions should ensure baseline alignment behaves regularly.-->
aa<div class="contain"><div class="innerContents">inner</div></div>bb
<br>
<!--CSS Test: A size-contained inline-flex element with specified width should ensure baseline alignment behaviour matches that of an empty object of the same type.-->
<!--CSS Test: A size-contained inline-flex element with specified width should ensure baseline alignment behaves regularly.-->
aa<div class="contain width"><div class="innerContents">inner</div></div>bb
</body>
</html>

View file

@ -9,6 +9,7 @@
== contain-paint-containing-block-fixed-001.html contain-paint-containing-block-fixed-001-ref.html
== contain-paint-formatting-context-float-001.html contain-paint-formatting-context-float-001-ref.html
== contain-paint-formatting-context-margin-001.html contain-paint-formatting-context-margin-001-ref.html
== contain-paint-ignored-cases-ib-split-001.html contain-paint-ignored-cases-ib-split-001-ref.html
== contain-paint-ignored-cases-internal-table-001a.html contain-paint-ignored-cases-internal-table-001-ref.html
== contain-paint-ignored-cases-internal-table-001b.html contain-paint-ignored-cases-internal-table-001-ref.html
== contain-paint-ignored-cases-no-principal-box-001.html contain-paint-ignored-cases-no-principal-box-001-ref.html
@ -35,6 +36,7 @@
== contain-layout-formatting-context-margin-001.html contain-layout-formatting-context-margin-001-ref.html
== contain-layout-containing-block-fixed-001.html contain-paint-containing-block-fixed-001-ref.html
== contain-layout-containing-block-absolute-001.html contain-paint-containing-block-absolute-001-ref.html
== contain-layout-ignored-cases-ib-split-001.html contain-layout-ignored-cases-ib-split-001-ref.html
== contain-layout-ignored-cases-no-principal-box-001.html contain-paint-ignored-cases-no-principal-box-001-ref.html
== contain-layout-ignored-cases-no-principal-box-002.html contain-layout-ignored-cases-no-principal-box-002-ref.html
== contain-layout-ignored-cases-no-principal-box-003.html contain-layout-ignored-cases-no-principal-box-003-ref.html

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<body>
<script src=/common/media.js></script>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<body>
<script src=/common/media.js></script>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<body>
<script src=/common/media.js></script>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<body>
<script src=/common/media.js></script>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<body>
<script src=/common/media.js></script>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<script src='/common/media.js'></script>
<script src='/resources/testharness.js'></script>
<script src='/resources/testharnessreport.js'></script>
<script src="/resources/testdriver.js"></script>
@ -21,7 +22,7 @@ const check_report_format = (reports, observer) => {
const loadVideo = () => new Promise(resolve => {
const video = document.createElement('video');
video.src = '/media/movie_5.ogv';
video.src = getVideoURI('/media/movie_5');
video.addEventListener('loadedmetadata', () => {
resolve(video);
}, { once: true });

View file

@ -1,3 +1,4 @@
<script src=/common/media.js></script>
<script src=/feature-policy/resources/picture-in-picture.js></script>
<script>
'use strict';

View file

@ -4,7 +4,7 @@ function isPictureInPictureAllowed() {
return new Promise(resolve => {
let video = document.createElement('video');
video.src = '/media/movie_5.ogv';
video.src = getVideoURI('/media/movie_5');
video.onloadedmetadata = () => {
video.requestPictureInPicture()
.then(() => resolve(document.pictureInPictureEnabled))

View file

@ -28,15 +28,26 @@ promise_test(async t => {
const stream = await timeout(navigator.mediaDevices.getUserMedia({video: true}), 10000, "getUserMedia timeout");
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
vid.defaultPlaybackRate = 0.4;
vid.playbackRate = 0.4;
vid.preload = "metadata";
vid.srcObject = stream;
vid.onratechange = t.unreached_func('ratechange event must not be fired');
vid.play();
assert_true(!vid.seeking, "A MediaStream is not seekable");
assert_equals(vid.seekable.length, 0, "A MediaStream is not seekable");
assert_equals(vid.defaultPlaybackRate, 1, "playback rate is always 1");
vid.defaultPlaybackRate = 0.5;
assert_equals(vid.defaultPlaybackRate, 1, "Setting defaultPlaybackRate must be ignored");
assert_equals(vid.playbackRate, 1, "playback rate is always 1");
vid.playbackRate = 0.5;
assert_equals(vid.playbackRate, 1, "Setting playbackRate must be ignored");
assert_equals(vid.buffered.length, 0, "A MediaStream cannot be preloaded. Therefore, there is no buffered timeranges");
assert_equals(vid.readyState, vid.HAVE_NOTHING, "readyState is HAVE_NOTHING initially");
assert_equals(vid.duration, NaN, "A MediaStream does not have any duration initially.");
assert_equals(vid.preload, "none", "preload must always be none");
vid.preload = "metadata";
assert_equals(vid.preload, "none", "Setting preload must be ignored");
const haveLoadedData = new Promise(r => vid.addEventListener("loadeddata", r, {once: true}));

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<title>Test disable Picture-in-Picture</title>
<script src="/common/media.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
@ -33,12 +34,11 @@ promise_test(async t => {
promise_test(async t => {
const video = await loadVideo();
return test_driver.bless('request Picture-in-Picture', async () => {
const promise = video.requestPictureInPicture();
video.disablePictureInPicture = true;
await promise_rejects(t, 'InvalidStateError', promise);
assert_equals(document.pictureInPictureElement, null);
});
await test_driver.bless('request Picture-in-Picture');
const promise = video.requestPictureInPicture();
video.disablePictureInPicture = true;
await promise_rejects(t, 'InvalidStateError', promise);
assert_equals(document.pictureInPictureElement, null);
}, 'Request Picture-in-Picture rejects if disablePictureInPicture becomes ' +
'true before promise resolves.');

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<title>Test enterpictureinpicture event</title>
<script src="/common/media.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<title>Test exit Picture-in-Picture</title>
<script src="/common/media.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>

View file

@ -1,3 +1,4 @@
// META: script=/common/media.js
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
// META: script=/resources/testdriver.js

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<title>Test leavepictureinpicture event</title>
<script src="/common/media.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<title>Test Picture-in-Picture element</title>
<script src="/common/media.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<title>Test Picture-in-Picture window</title>
<script src="/common/media.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<title>Test request Picture-in-Picture on two videos</title>
<script src="/common/media.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
@ -10,12 +11,9 @@
promise_test(async t => {
const video1 = await loadVideo();
const video2 = await loadVideo();
return test_driver.bless(
'request Picture-in-Picture',
async () => {
video1.requestPictureInPicture();
promise_rejects(t, 'NotAllowedError', video2.requestPictureInPicture());
}
);
await test_driver.bless('request Picture-in-Picture');
const promise = video1.requestPictureInPicture();
await promise_rejects(t, 'NotAllowedError', video2.requestPictureInPicture());
return promise;
}, 'request Picture-in-Picture consumes user gesture');
</script>

View file

@ -1,5 +1,6 @@
<!DOCTYPE html>
<title>Test request Picture-in-Picture</title>
<script src="/common/media.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
@ -21,7 +22,7 @@ promise_test(t => {
promise_test(async t => {
const video = document.createElement('video');
await new Promise(resolve => {
video.src = '/media/sound_5.oga';
video.src = getAudioURI('/media/sound_5');
video.onloadeddata = resolve;
}).then(() => {
return promise_rejects(t, 'InvalidStateError',

View file

@ -8,15 +8,14 @@ function loadVideo(activeDocument, sourceUrl) {
return new Promise((resolve, reject) => {
const document = activeDocument || window.document;
const video = document.createElement('video');
video.src = sourceUrl || '/media/movie_5.ogv';
video.src = sourceUrl || getVideoURI('/media/movie_5');
video.onloadedmetadata = () => { resolve(video); };
video.onerror = error => { reject(error); };
});
}
// Calls requestPictureInPicture() in a context that's 'allowed to request PiP'.
function requestPictureInPictureWithTrustedClick(videoElement) {
return test_driver.bless(
'request Picture-in-Picture',
() => videoElement.requestPictureInPicture());
async function requestPictureInPictureWithTrustedClick(videoElement) {
await test_driver.bless('request Picture-in-Picture');
return videoElement.requestPictureInPicture();
}

View file

@ -1,11 +1,12 @@
<!DOCTYPE html>
<title>Test for pictureInPictureElement adjustment for Shadow DOM</title>
<script src='/resources/testharness.js'></script>
<script src='/resources/testharnessreport.js'></script>
<script src="/common/media.js"></script>
<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="resources/picture-in-picture-helpers.js"></script>
<script src='../shadow-dom/resources/shadow-dom.js'></script>
<script src="../shadow-dom/resources/shadow-dom.js"></script>
<body>
<div id='host'>
<template data-mode='open' id='root'>
@ -45,7 +46,7 @@ promise_test(async t => {
assert_equals(ids.root5.pictureInPictureElement, null);
await new Promise(resolve => {
ids.video.src = '/media/movie_5.ogv';
ids.video.src = getVideoURI('/media/movie_5');
ids.video.onloadeddata = resolve;
})
.then(() => requestPictureInPictureWithTrustedClick(ids.video))
@ -58,4 +59,4 @@ promise_test(async t => {
assert_equals(ids.root5.pictureInPictureElement, null);
})
});
</script>
</script>

View file

@ -0,0 +1,47 @@
<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="resources/test-helpers.sub.js?pipe=sub"></script>
<script>
promise_test(async (t) => {
const SCOPE = 'resources/empty.html';
const SCRIPT = 'resources/fetch-rewrite-worker.js';
const host_info = get_host_info();
const REMOTE_ORIGIN = host_info.HTTPS_REMOTE_ORIGIN;
const reg = await service_worker_unregister_and_register(t, SCRIPT, SCOPE);
await wait_for_state(t, reg.installing, 'activated');
const frame = await with_iframe(SCOPE);
const doc = frame.contentDocument;
const win = frame.contentWindow;
const context = new win.AudioContext();
try {
context.suspend();
const audio = doc.createElement('audio');
audio.autoplay = true;
const source = context.createMediaElementSource(audio);
const spn = context.createScriptProcessor(16384, 1, 1);
source.connect(spn).connect(context.destination);
const url = `${REMOTE_ORIGIN}/webaudio/resources/sin_440Hz_-6dBFS_1s.wav`;
audio.src = '/test?url=' + encodeURIComponent(url);
doc.body.appendChild(audio);
await new Promise((resolve) => {
audio.addEventListener('playing', resolve);
});
await context.resume();
const event = await new Promise((resolve) => {
spn.addEventListener('audioprocess', resolve);
});
const data = event.inputBuffer.getChannelData(0);
for (const e of data) {
assert_equals(e, 0);
}
} finally {
context.close();
}
}, 'Verify CORS XHR of fetch() in a Service Worker');
</script>

View file

@ -693,7 +693,16 @@ class TestRunnerManager(threading.Thread):
# This might leak a file handle from the queue
self.logger.warning("Forcibly terminating runner process")
self.test_runner_proc.terminate()
self.test_runner_proc.join(10)
# Multiprocessing queues are backed by operating system pipes. If
# the pipe in the child process had buffered data at the time of
# forced termination, the queue is no longer in a usable state
# (subsequent attempts to retrieve items may block indefinitely).
# Discard the potentially-corrupted queue and create a new one.
self.command_queue.close()
self.command_queue = Queue()
self.remote_queue.close()
self.remote_queue = Queue()
else:
self.logger.debug("Runner process exited with code %i" % self.test_runner_proc.exitcode)

View file

@ -0,0 +1,85 @@
<!DOCTYPE html>
<html>
<head>
<title>
Test passing SharedArrayBuffer to an AudioWorklet
</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/webaudio/resources/audit.js"></script>
</head>
<body>
<script id="layout-test-code">
let audit = Audit.createTaskRunner();
let context = new AudioContext();
let filePath = 'processors/sharedarraybuffer-processor.js';
if (window.SharedArrayBuffer) {
audit.define(
'Test postMessage from AudioWorkletProcessor to AudioWorkletNode',
(task, should) => {
let workletNode =
new AudioWorkletNode(context, 'sharedarraybuffer-processor');
// After it is created, the worklet will send a new
// SharedArrayBuffer to the main thread.
//
// The worklet will then wait to receive a message from the main
// thread.
//
// When it receives the message, it will check whether it is a
// SharedArrayBuffer, and send this information back to the main
// thread.
workletNode.port.onmessage = (event) => {
let data = event.data;
switch (data.state) {
case 'created':
should(
data.sab instanceof SharedArrayBuffer,
'event.data.sab from worklet is an instance of SharedArrayBuffer')
.beTrue();
// Send a SharedArrayBuffer back to the worklet.
let sab = new SharedArrayBuffer(8);
workletNode.port.postMessage(sab);
break;
case 'received message':
should(data.isSab, 'event.data from main thread is an instance of SharedArrayBuffer')
.beTrue();
task.done();
break;
default:
should(false,
`Got unexpected message from worklet: ${data.state}`)
.beTrue();
task.done();
break;
}
};
workletNode.port.onmessageerror = (event) => {
should(false, 'Got messageerror from worklet').beTrue();
task.done();
};
});
} else {
// NOTE(binji): SharedArrayBuffer is only enabled where we have site
// isolation.
audit.define('Skipping test because SharedArrayBuffer is not defined',
(task, should) => {
task.done();
});
}
context.audioWorklet.addModule(filePath).then(() => {
audit.run();
});
</script>
</body>
</html>

View file

@ -0,0 +1,35 @@
/**
* @class SharedArrayBufferProcessor
* @extends AudioWorkletProcessor
*
* This processor class demonstrates passing SharedArrayBuffers to and from
* workers.
*/
class SharedArrayBufferProcessor extends AudioWorkletProcessor {
constructor() {
super();
this.port.onmessage = this.handleMessage.bind(this);
this.port.onmessageerror = this.handleMessageError.bind(this);
let sab = new SharedArrayBuffer(8);
this.port.postMessage({state: 'created', sab});
}
handleMessage(event) {
this.port.postMessage({
state: 'received message',
isSab: event.data instanceof SharedArrayBuffer
});
}
handleMessageError(event) {
this.port.postMessage({
state: 'received messageerror'
});
}
process() {
return true;
}
}
registerProcessor('sharedarraybuffer-processor', SharedArrayBufferProcessor);