Update web-platform-tests to revision 0fe9f012a8ee5503b728a379705a6c5286ba1e96

This commit is contained in:
WPT Sync Bot 2018-02-23 20:08:37 -05:00
parent 8329a45163
commit 5dc1649544
69 changed files with 1716 additions and 112 deletions

View file

@ -133,6 +133,12 @@
{}
]
],
"accelerometer/LinearAccelerationSensor-shake-threshold-manual.https.html": [
[
"/accelerometer/LinearAccelerationSensor-shake-threshold-manual.https.html",
{}
]
],
"accname/description_from_content_of_describedby_element-manual.html": [
[
"/accname/description_from_content_of_describedby_element-manual.html",
@ -1105,6 +1111,24 @@
{}
]
],
"clipboard-apis/copy-event-manual.html": [
[
"/clipboard-apis/copy-event-manual.html",
{}
]
],
"clipboard-apis/cut-event-manual.html": [
[
"/clipboard-apis/cut-event-manual.html",
{}
]
],
"clipboard-apis/paste-event-manual.html": [
[
"/clipboard-apis/paste-event-manual.html",
{}
]
],
"console/console-count-logging-manual.html": [
[
"/console/console-count-logging-manual.html",
@ -108417,6 +108441,78 @@
{}
]
],
"css/css-flexbox/abspos-autopos-htb-ltr.html": [
[
"/css/css-flexbox/abspos-autopos-htb-ltr.html",
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"css/css-flexbox/abspos-autopos-htb-rtl.html": [
[
"/css/css-flexbox/abspos-autopos-htb-rtl.html",
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"css/css-flexbox/abspos-autopos-vlr-ltr.html": [
[
"/css/css-flexbox/abspos-autopos-vlr-ltr.html",
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"css/css-flexbox/abspos-autopos-vlr-rtl.html": [
[
"/css/css-flexbox/abspos-autopos-vlr-rtl.html",
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"css/css-flexbox/abspos-autopos-vrl-ltr.html": [
[
"/css/css-flexbox/abspos-autopos-vrl-ltr.html",
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"css/css-flexbox/abspos-autopos-vrl-rtl.html": [
[
"/css/css-flexbox/abspos-autopos-vrl-rtl.html",
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"css/css-flexbox/align-content-001.htm": [
[
"/css/css-flexbox/align-content-001.htm",
@ -185322,6 +185418,11 @@
{}
]
],
"./.pyup.yml": [
[
{}
]
],
"./.travis.yml": [
[
{}
@ -305730,6 +305831,12 @@
{}
]
],
"WebIDL/ecmascript-binding/default-iterator-object.html": [
[
"/WebIDL/ecmascript-binding/default-iterator-object.html",
{}
]
],
"WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.any.js": [
[
"/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.any.html",
@ -305794,6 +305901,12 @@
{}
]
],
"WebIDL/ecmascript-binding/iterator-prototype-object.html": [
[
"/WebIDL/ecmascript-binding/iterator-prototype-object.html",
{}
]
],
"WebIDL/ecmascript-binding/legacy-callback-interface-object.html": [
[
"/WebIDL/ecmascript-binding/legacy-callback-interface-object.html",
@ -306314,6 +306427,22 @@
}
]
],
"bluetooth/characteristic/service-same-from-2-characteristics.https.html": [
[
"/bluetooth/characteristic/service-same-from-2-characteristics.https.html",
{
"testdriver": true
}
]
],
"bluetooth/characteristic/service-same-object.https.html": [
[
"/bluetooth/characteristic/service-same-object.https.html",
{
"testdriver": true
}
]
],
"bluetooth/characteristic/startNotifications/gen-characteristic-is-removed.https.html": [
[
"/bluetooth/characteristic/startNotifications/gen-characteristic-is-removed.https.html",
@ -306362,6 +306491,14 @@
}
]
],
"bluetooth/descriptor/readValue/read-succeeds.https.html": [
[
"/bluetooth/descriptor/readValue/read-succeeds.https.html",
{
"testdriver": true
}
]
],
"bluetooth/descriptor/writeValue/gen-service-is-removed.https.html": [
[
"/bluetooth/descriptor/writeValue/gen-service-is-removed.https.html",
@ -306370,12 +306507,52 @@
}
]
],
"bluetooth/device/gattserverdisconnected-event/disconnected.https.html": [
[
"/bluetooth/device/gattserverdisconnected-event/disconnected.https.html",
{
"testdriver": true
}
]
],
"bluetooth/device/gattserverdisconnected-event/disconnected_gc.https.html": [
[
"/bluetooth/device/gattserverdisconnected-event/disconnected_gc.https.html",
{
"testdriver": true
}
]
],
"bluetooth/device/gattserverdisconnected-event/one-event-per-disconnection.https.html": [
[
"/bluetooth/device/gattserverdisconnected-event/one-event-per-disconnection.https.html",
{
"testdriver": true
}
]
],
"bluetooth/device/gattserverdisconnected-event/reconnect-during-disconnected-event.https.html": [
[
"/bluetooth/device/gattserverdisconnected-event/reconnect-during-disconnected-event.https.html",
{
"testdriver": true
}
]
],
"bluetooth/idl/idl-Bluetooth.html": [
[
"/bluetooth/idl/idl-Bluetooth.html",
{}
]
],
"bluetooth/idl/idl-BluetoothDevice.https.html": [
[
"/bluetooth/idl/idl-BluetoothDevice.https.html",
{
"testdriver": true
}
]
],
"bluetooth/idl/idl-BluetoothUUID.html": [
[
"/bluetooth/idl/idl-BluetoothUUID.html",
@ -307140,6 +307317,22 @@
}
]
],
"bluetooth/service/device-same-from-2-services.https.html": [
[
"/bluetooth/service/device-same-from-2-services.https.html",
{
"testdriver": true
}
]
],
"bluetooth/service/device-same-object.https.html": [
[
"/bluetooth/service/device-same-object.https.html",
{
"testdriver": true
}
]
],
"bluetooth/service/getCharacteristic/characteristic-found.https.html": [
[
"/bluetooth/service/getCharacteristic/characteristic-found.https.html",
@ -307640,6 +307833,12 @@
{}
]
],
"content-security-policy/embedded-enforcement/required-csp-header-cascade.html": [
[
"/content-security-policy/embedded-enforcement/required-csp-header-cascade.html",
{}
]
],
"content-security-policy/embedded-enforcement/required_csp-header.html": [
[
"/content-security-policy/embedded-enforcement/required_csp-header.html",
@ -310676,6 +310875,12 @@
}
]
],
"css/css-animations/pending-style-changes-001.html": [
[
"/css/css-animations/pending-style-changes-001.html",
{}
]
],
"css/css-backgrounds/background-331.html": [
[
"/css/css-backgrounds/background-331.html",
@ -315724,12 +315929,24 @@
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/background-color.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/background-color.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/background-image.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/background-image.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/border-color.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/border-color.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/border-style.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/border-style.html",
@ -315748,6 +315965,24 @@
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/caret-color.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/caret-color.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/color.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/color.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/column-rule-color.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/column-rule-color.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/display.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/display.html",
@ -315784,6 +316019,12 @@
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/outline-color.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/outline-color.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/padding.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/padding.html",
@ -315808,12 +316049,24 @@
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/text-decoration-color.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/text-decoration-color.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/text-decoration-style.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/text-decoration-style.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/text-emphasis-color.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/text-emphasis-color.html",
{}
]
],
"css/css-typed-om/the-stylepropertymap/properties/top.html": [
[
"/css/css-typed-om/the-stylepropertymap/properties/top.html",
@ -388881,6 +389134,10 @@
"525f7d93f00f11086aabc1f652cf06623e21986c",
"support"
],
"./.pyup.yml": [
"0f4dffbe91d06bbfce52245ea7ef8058d3f3a3b8",
"support"
],
"./.travis.yml": [
"975f331eb3438e5b66ccd721e1afce796b6af0d5",
"support"
@ -395249,6 +395506,10 @@
"3d9564314c7ce59ce6a29dfa94c35e496e214bf5",
"testharness"
],
"WebIDL/ecmascript-binding/default-iterator-object.html": [
"1a7f8c61771a412544ef4a1aa187f5823615197f",
"testharness"
],
"WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.any.js": [
"34432979f039c4e1ba4eb90d4f2acc96d1d441d8",
"testharness"
@ -395281,6 +395542,10 @@
"13d2a9dbbd0d78e240c2b88d548f88ba41184e5f",
"testharness"
],
"WebIDL/ecmascript-binding/iterator-prototype-object.html": [
"60a872f6a82df3dc4438168ae4d0c3516ba03bba",
"testharness"
],
"WebIDL/ecmascript-binding/legacy-callback-interface-object.html": [
"4eac8c853a0627577d2bd96ed76c45bd187a5734",
"testharness"
@ -395781,6 +396046,10 @@
"c82f9595dc2582b2da40549a358da1c3fc2ff820",
"manual"
],
"accelerometer/LinearAccelerationSensor-shake-threshold-manual.https.html": [
"30e8588ff49a1d526d65aac89bc80f4782715914",
"manual"
],
"accelerometer/OWNERS": [
"b119dbb984792f33c6e7463f3105d37c3c3b7ad8",
"support"
@ -398833,6 +399102,14 @@
"b79a74ccf33bc76e6582ee7c1e2f3c277f99ddfb",
"testharness"
],
"bluetooth/characteristic/service-same-from-2-characteristics.https.html": [
"975aff2aff29d024b7afd73fc301244e490951a7",
"testharness"
],
"bluetooth/characteristic/service-same-object.https.html": [
"61955287698126b45ccc44f296b53a5876e23858",
"testharness"
],
"bluetooth/characteristic/startNotifications/gen-characteristic-is-removed.https.html": [
"97f5d01743721207c5addfb9625fd3da7c0c61e3",
"testharness"
@ -398857,10 +399134,30 @@
"47f1bd316ae7d2637524a1b5d4436a3f11b20fd0",
"testharness"
],
"bluetooth/descriptor/readValue/read-succeeds.https.html": [
"dc7dd900f79a9205af3e904a309d565ae409afe9",
"testharness"
],
"bluetooth/descriptor/writeValue/gen-service-is-removed.https.html": [
"07c2dc0a081786302040942a989cc49f6b3fa3ca",
"testharness"
],
"bluetooth/device/gattserverdisconnected-event/disconnected.https.html": [
"ee14803683f17133c6147c2eaf250befbaaf0be1",
"testharness"
],
"bluetooth/device/gattserverdisconnected-event/disconnected_gc.https.html": [
"6b4676f3b9b34ffa45ff616eb9d3c514e33ad471",
"testharness"
],
"bluetooth/device/gattserverdisconnected-event/one-event-per-disconnection.https.html": [
"a0fbabe94fe246c2031fe4baf30ba52b58a17b36",
"testharness"
],
"bluetooth/device/gattserverdisconnected-event/reconnect-during-disconnected-event.https.html": [
"a66e1df2d870876d06ad0990ea523153539eff0e",
"testharness"
],
"bluetooth/generate.py": [
"ef112d89bc14d0e9ebbb457798609f6000a80935",
"support"
@ -398873,6 +399170,10 @@
"9ef91a8214b3a46278d8b9b442b34d9052342342",
"testharness"
],
"bluetooth/idl/idl-BluetoothDevice.https.html": [
"b4c78ec760b61420a82f4a1a2951fb2eaa6af10d",
"testharness"
],
"bluetooth/idl/idl-BluetoothUUID.html": [
"4feb7657e77a18489bbe2d7a98405470c6ce0b82",
"testharness"
@ -399377,6 +399678,14 @@
"60b7203a67f69acfd884f0b256dd7357fe717392",
"testharness"
],
"bluetooth/service/device-same-from-2-services.https.html": [
"e321ec75c308f64f29c7208e6b6769f7497d7cd7",
"testharness"
],
"bluetooth/service/device-same-object.https.html": [
"971c1836c90695bdb6b9ae76ef4f488b254c5e40",
"testharness"
],
"bluetooth/service/getCharacteristic/characteristic-found.https.html": [
"53479f342ef4aab9a24aaaa4580a63b5e6bcd30b",
"testharness"
@ -399533,6 +399842,18 @@
"e69933ca4cdc42105d469b7ffb105aa60a8e0875",
"manual"
],
"clipboard-apis/copy-event-manual.html": [
"e81d71b8fd70ba571bbded9df62c460f5799b335",
"manual"
],
"clipboard-apis/cut-event-manual.html": [
"39f1e3f3f492a8da5fa00841b3a982ca4f47b14e",
"manual"
],
"clipboard-apis/paste-event-manual.html": [
"26ecfb7c87f732aab17cf1084440111153f5771f",
"manual"
],
"common/OWNERS": [
"13fbb201f77b9929d7f5693b70855c9b68abc70b",
"support"
@ -417677,8 +417998,12 @@
"d5a253732352f46d33c1a58d1a3183a88daa3a75",
"testharness"
],
"content-security-policy/embedded-enforcement/required-csp-header-cascade.html": [
"94bb2f69cbef65ac9c062fe38990b5dcf4a5812c",
"testharness"
],
"content-security-policy/embedded-enforcement/required_csp-header.html": [
"b5c68072adf79a87b1371c34a9357a1507d6d981",
"ad4636d3552abe07c662513a8b7673fa4e5f59d6",
"testharness"
],
"content-security-policy/embedded-enforcement/subsumption_algorithm-general.html": [
@ -417742,11 +418067,11 @@
"support"
],
"content-security-policy/embedded-enforcement/support/echo-required-csp.py": [
"3ece10b38406736c7ca5cd0c1b5fb9e8088ef655",
"8d73332cdc154e05cdfa936d3f6b936b9c0ebdba",
"support"
],
"content-security-policy/embedded-enforcement/support/testharness-helper.sub.js": [
"01887343762a0f997ee59c8392a63d0a6101b1f9",
"23feae559098474ba96b15f07619b9d7dba12dec",
"support"
],
"content-security-policy/font-src/font-match-allowed.sub.html": [
@ -480025,6 +480350,10 @@
"d4692e2ac84a6dbbc9efd7937964d43ecd9dd109",
"manual"
],
"css/css-animations/pending-style-changes-001.html": [
"5f2bf4b6712dd230109be62407cd31800451a271",
"testharness"
],
"css/css-backgrounds/OWNERS": [
"656d9f4e3a66f8cb955910171b9997140e4bbd8e",
"support"
@ -486361,6 +486690,30 @@
"fe3aff8ac5243f870350d3a0eaa3393f93705c53",
"support"
],
"css/css-flexbox/abspos-autopos-htb-ltr.html": [
"d29f529c4d361705c3c5481f465e9e329ac7cb73",
"reftest"
],
"css/css-flexbox/abspos-autopos-htb-rtl.html": [
"02d905c849b93c526c4f60674177189e5851bcdb",
"reftest"
],
"css/css-flexbox/abspos-autopos-vlr-ltr.html": [
"849b20949f116f7876e09203a960a31c732ead22",
"reftest"
],
"css/css-flexbox/abspos-autopos-vlr-rtl.html": [
"7039b16d7789dca89df92092ee9e398fa7638c14",
"reftest"
],
"css/css-flexbox/abspos-autopos-vrl-ltr.html": [
"ab60d0e7d2ea15107a3c473fe700d8090fcbf9ec",
"reftest"
],
"css/css-flexbox/abspos-autopos-vrl-rtl.html": [
"7039b16d7789dca89df92092ee9e398fa7638c14",
"reftest"
],
"css/css-flexbox/align-content-001.htm": [
"fca8923c7a29229ae744af295a70533e306f3dd1",
"reftest"
@ -519433,10 +519786,18 @@
"05e0be2c67fd695d693f2a639acf88ff78d8fd04",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/background-color.html": [
"f52a2182afc7107a9f411a27aab81c4c4c90ef1e",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/background-image.html": [
"1255fea8e74561e14720ccf422fd841e1d3e32fa",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/border-color.html": [
"5b8adde602ac79d8b1ea92bd29f25d8756d72f8a",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/border-style.html": [
"5d258827fb6a26d07efbdf5b47a440300f0aa307",
"testharness"
@ -519449,6 +519810,18 @@
"e710943711544b28d07676df15966950c0d76efa",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/caret-color.html": [
"d4139aeff755abe89ee1e04fcd34ccfba4efe91c",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/color.html": [
"291f8e058d1fa6e342f4316c0760ec4cbdbc403c",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/column-rule-color.html": [
"ec00a4b773f2ae421b8f688908925e28d2281614",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/display.html": [
"26ba44d8d5146b9d606a1668659ee16876b371c5",
"testharness"
@ -519473,6 +519846,10 @@
"3812b01e648e3b043abbd2fe82c3733309da49ad",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/outline-color.html": [
"612e77914108dbba0b271b20eb3e9e80199349b3",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/padding.html": [
"70c2e29badef7528469bcf11e1cb7bbc6cd519ea",
"testharness"
@ -519482,7 +519859,7 @@
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/resources/testsuite.js": [
"b0978c7b09302ce534bdf9e77d880610edbbe6ef",
"a3df35f32209493e429282b89f4fdcc6581abe07",
"support"
],
"css/css-typed-om/the-stylepropertymap/properties/right.html": [
@ -519493,10 +519870,18 @@
"88a1f5866a767c25dec2ef75728c68c5631d371f",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/text-decoration-color.html": [
"fe6d3765ca8fea1c1963a310d0aa35fa68089a9b",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/text-decoration-style.html": [
"aa9698c5b4cb896fc43c58794df84ec0bbb0e3e9",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/text-emphasis-color.html": [
"9419ab219034d1fb732965ebd3a03934bcaddf5a",
"testharness"
],
"css/css-typed-om/the-stylepropertymap/properties/top.html": [
"218b50f6b7d8209514bca8d0a8121263b07ab1e2",
"testharness"
@ -541954,7 +542339,7 @@
"testharness"
],
"custom-elements/pseudo-class-defined.html": [
"cf29756830dc12e60390c08486bbb3170c9c9c71",
"9cef47df0d95c620f754c477609f6088059879a2",
"testharness"
],
"custom-elements/reaction-timing.html": [
@ -548654,7 +549039,7 @@
"testharness"
],
"fullscreen/model/move-to-fullscreen-iframe-manual.html": [
"0fc5409f5e44177e1153fb61c25506c05114dc35",
"62aec7e1d5065bf99a00fc533c8c6d6704ac2010",
"manual"
],
"fullscreen/model/move-to-iframe-manual.html": [
@ -568494,7 +568879,7 @@
"support"
],
"interfaces/geolocation-sensor.idl": [
"158edb1945e5b3cefdb92953c6b3caf191d86986",
"7f5defe8969fd21ed1b8eeaedc9a766cb4b695c1",
"support"
],
"interfaces/geometry.idl": [
@ -589098,7 +589483,7 @@
"testharness"
],
"service-workers/service-worker/resource-timing.https.html": [
"a835a0baeb4fcc0c44e6be28502f89308464acc5",
"23cadb03b48a885dbbd9a5dfdc38b5b58f99d18a",
"testharness"
],
"service-workers/service-worker/resources/404.py": [
@ -589930,7 +590315,7 @@
"support"
],
"service-workers/service-worker/resources/resource-timing-iframe.sub.html": [
"c18c96a25dec48ae9d53359d4ca987ba857878a1",
"75bd224a9680af0557c53fb6e77645e4e0b8173d",
"support"
],
"service-workers/service-worker/resources/resource-timing-worker.js": [
@ -598766,11 +599151,11 @@
"testharness"
],
"webrtc/RTCDTMFSender-helper.js": [
"205469a5d95d35c0cdc091afafa49ecaccac7e2d",
"79825a416ad8e027628e80c9e0ef1a8dca2d8ca3",
"support"
],
"webrtc/RTCDTMFSender-insertDTMF.https.html": [
"50ef787a77512dc7eea7731b9766fda4d1456694",
"591337627bf4bd0e40e6a5660efa9fc1e320d89f",
"testharness"
],
"webrtc/RTCDTMFSender-ontonechange-long.https.html": [
@ -598778,7 +599163,7 @@
"testharness"
],
"webrtc/RTCDTMFSender-ontonechange.https.html": [
"5d81b305d0b46f158e1533ffea648ae61f09c58a",
"4f53cbc7fafeeed5202774b58d4bf721055b382e",
"testharness"
],
"webrtc/RTCDataChannel-bufferedAmount.html": [
@ -603742,11 +604127,11 @@
"support"
],
"workers/data-url-shared.html": [
"3650dbf419d8bbfe7380a36426793336998975cc",
"7fae8fa78f0e66ffa8cf0dd1bf3e887fae349e4e",
"testharness"
],
"workers/data-url.html": [
"c693eac37e1a8856b82a923b2f1142360afc6411",
"3de4925fb0a05ecf4da839dbf9b293c73a3c0354",
"testharness"
],
"workers/interfaces.worker.js": [

View file

@ -0,0 +1,7 @@
[default-iterator-object.html]
[Object.prototype.toString returns correct value]
expected: FAIL
[@@toStringTag has correct value from prototype]
expected: FAIL

View file

@ -0,0 +1,7 @@
[iterator-prototype-object.html]
[Object.prototype.toString returns correct value]
expected: FAIL
[@@toStringTag has correct value]
expected: FAIL

View file

@ -0,0 +1,7 @@
[pending-style-changes-001.html]
[Animatable::getAnimations() should be able to see a style-created CSS animation immediately]
expected: FAIL
[Document::getAnimations() should be able to see a style-created CSS animation immediately]
expected: FAIL

View file

@ -0,0 +1,2 @@
[abspos-autopos-htb-ltr.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[abspos-autopos-htb-rtl.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[abspos-autopos-vlr-ltr.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[abspos-autopos-vlr-rtl.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[abspos-autopos-vrl-ltr.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[abspos-autopos-vrl-rtl.html]
expected: FAIL

View file

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

View file

@ -0,0 +1,4 @@
[010.html]
[Salvagability of document.opened document]
expected: FAIL

View file

@ -30,3 +30,9 @@
[A data: URL shared worker should not be shared among origins.]
expected: FAIL
[indexedDB is present]
expected: FAIL
[indexedDB is inaccessible]
expected: FAIL

View file

@ -3,3 +3,6 @@
[worker has opaque origin]
expected: FAIL
[indexedDB is present]
expected: FAIL

View file

@ -1,2 +1,3 @@
[border_radius_elliptical_a.html]
bug: https://github.com/servo/servo/issues/19271
expected: FAIL

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,40 @@
# search for requirement files
# default: True
# allowed: True, False
search: False
# Specify requirement files by hand, default is empty
# default: empty
# allowed: list
requirements:
- tools/wptrunner/requirements_chrome_android.txt:
update: all
pin: True
- tools/wptrunner/requirements_edge.txt:
update: all
pin: True
- tools/wptrunner/requirements_opera.txt:
update: all
pin: True
- tools/wptrunner/requirements_servo.txt:
update: all
pin: True
- tools/wptrunner/requirements_sauce.txt:
update: all
pin: True
- tools/wptrunner/requirements_ie.txt:
update: all
pin: True
- tools/wptrunner/requirements.txt:
update: all
pin: True
- tools/wptrunner/requirements_firefox.txt:
update: all
pin: True
- tools/wptrunner/requirements_chrome.txt:
update: all
pin: True
- tools/wpt/requirements.txt:
update: all
pin: True

View file

@ -0,0 +1,27 @@
<!doctype html>
<meta charset="utf-8">
<title>Default iterator objects</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
test(() => {
const iterator1 = new URLSearchParams()[Symbol.iterator]();
const iterator2 = new URLSearchParams().keys();
const iterator3 = new URLSearchParams().values();
const iterator4 = new URLSearchParams().entries();
assert_equals(Object.getPrototypeOf(iterator1), Object.getPrototypeOf(iterator2));
assert_equals(Object.getPrototypeOf(iterator1), Object.getPrototypeOf(iterator3));
assert_equals(Object.getPrototypeOf(iterator1), Object.getPrototypeOf(iterator4));
}, "Default iterator objects for an interface have the same prototype");
test(() => {
const iterator = new URLSearchParams().entries();
assert_equals(Object.prototype.toString.call(iterator), "[object URLSearchParams Iterator]");
}, "Object.prototype.toString returns correct value");
test(() => {
const iterator = new URLSearchParams().entries();
assert_equals(iterator[Symbol.toStringTag], "URLSearchParams Iterator");
assert_equals(Object.getOwnPropertyDescriptor(iterator, Symbol.toStringTag), undefined);
}, "@@toStringTag has correct value from prototype");
</script>

View file

@ -0,0 +1,56 @@
<!doctype html>
<meta charset="utf-8">
<title>Iterator prototype objects</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
test(() => {
const esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
const iteratorProto = Object.getPrototypeOf(new URLSearchParams().entries());
assert_equals(Object.getPrototypeOf(iteratorProto), esIteratorPrototype);
}, "Has %IteratorPrototype% as prototype");
test(() => {
const iteratorProto = Object.getPrototypeOf(new URLSearchParams().entries());
const desc = Object.getOwnPropertyDescriptor(iteratorProto, "next");
assert_equals(typeof desc.value, "function");
assert_equals(desc.writable, true);
assert_equals(desc.enumerable, true);
assert_equals(desc.configurable, true);
}, "next() exists and is writable, enumerable, and configurable");
test(() => {
const usp = new URLSearchParams();
const iteratorProto = Object.getPrototypeOf(usp.entries());
assert_throws(new TypeError(), () => {
iteratorProto.next();
});
assert_throws(new TypeError(), () => {
iteratorProto.next.call(undefined);
});
assert_throws(new TypeError(), () => {
iteratorProto.next.call(42);
});
assert_throws(new TypeError(), () => {
iteratorProto.next.call(new Headers().entries());
});
}, "next() throws TypeError when called on ineligible receiver");
test(() => {
const iteratorProto = Object.getPrototypeOf(new URLSearchParams().entries());
assert_equals(Object.prototype.toString.call(iteratorProto), "[object URLSearchParams Iterator]");
}, "Object.prototype.toString returns correct value");
test(() => {
const iteratorProto = Object.getPrototypeOf(new URLSearchParams().entries());
assert_equals(Object.getOwnPropertyDescriptor(iteratorProto, Symbol.toStringTag).value, "URLSearchParams Iterator");
// Property attributes have not yet been fully spec'd.
}, "@@toStringTag has correct value");
test(() => {
const iteratorProto1 = Object.getPrototypeOf(new URLSearchParams().entries());
const iteratorProto2 = Object.getPrototypeOf(new Headers().entries());
assert_not_equals(iteratorProto1, iteratorProto2);
}, "Is specific to an interface");
</script>

View file

@ -0,0 +1,32 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>LinearAccelerationSensor Shake Threshold Test</title>
<link rel="author" title="Intel" href="http://www.intel.com">
<link rel="help" href="https://w3c.github.io/accelerometer/#examples">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<p class="instructions">
Shake gesture along x axis of the device.
</p>
<script>
setup({explicit_timeout: true});
async_test(t => {
const shakeThreshold = 25;
const sensor = new LinearAccelerationSensor({frequency: 60});
sensor.onreading = t.step_func(() => {
if (sensor.x > shakeThreshold) {
t.done();
}
});
sensor.onerror = t.step_func_done(event => {
assert_unreached(event.error.name + ":" + event.error.message);
});
sensor.start();
}, "Test that when shaking gesture along x axis of the device, the shake threshold can be greater than 25");
</script>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
'use strict';
const test_desc = 'Same parent service returned from multiple characteristics.';
bluetooth_test(() => getHealthThermometerService()
.then(({service}) => Promise.all([
service.getCharacteristic('measurement_interval'),
service.getCharacteristic('temperature_measurement')
]))
.then(characteristics =>
assert_equals(characteristics[0].service, characteristics[1].service)),
test_desc);
</script>

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
'use strict';
const test_desc = '[SameObject] test for BluetoothRemoteGATTCharacteristic ' +
'service.';
bluetooth_test(() => getMeasurementIntervalCharacteristic()
.then(({characteristic}) =>
assert_equals(characteristic.service, characteristic.service)),
test_desc);
</script>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
'use strict';
const test_desc = 'A read request succeeds and returns the descriptor\'s value.';
const EXPECTED_VALUE = [0, 1, 2];
let descriptor, fake_descriptor;
bluetooth_test(() => getUserDescriptionDescriptor()
.then(_ => ({descriptor, fake_descriptor} = _))
.then(() =>
fake_descriptor.setNextReadResponse(GATT_SUCCESS, EXPECTED_VALUE))
.then(() => descriptor.readValue())
.then(value => assert_array_equals(Array.from(new Uint8Array(
value.buffer)), EXPECTED_VALUE)),
test_desc);
</script>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
'use strict';
const test_desc = 'A device disconnecting while connected should fire the ' +
'gattserverdisconnected event.';
bluetooth_test(() => getHealthThermometerDevice()
.then(({device, fake_peripheral}) => {
fake_peripheral.simulateGATTDisconnection();
return eventPromise(device, 'gattserverdisconnected');
})
.then(e => assert_true(e.bubbles)),
test_desc);
</script>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
'use strict';
const test_desc = 'A device disconnecting after the BluetoothDevice object ' +
'has been GC\'ed should not access freed memory.';
bluetooth_test(() => getHealthThermometerDevice()
.then(({fake_peripheral}) => {
// 1. Disconnect.
fake_peripheral.simulateGATTDisconnection();
// 2. Run garbage collection.
fake_peripheral = undefined;
runGarbageCollection();
})
// 3. Wait 50ms after the GC runs for the disconnection event to come back.
// There's nothing to assert other than that only valid memory is used.
.then(() => new Promise(resolve => step_timeout(resolve, 50))),
test_desc);
</script>

View file

@ -0,0 +1,32 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
'use strict';
const test_desc = 'If a site disconnects from a device while the platform is ' +
'disconnecting that device, only one gattserverdisconnected event should ' +
'fire.';
let device, fake_peripheral;
let num_events = 0;
bluetooth_test(() => getHealthThermometerDevice()
.then(_ => ({device, fake_peripheral} = _))
// 1. Listen for disconnections.
.then(() =>
device.addEventListener('gattserverdisconnected', () => num_events++))
// 2. Disconnect several times.
.then(() => Promise.all([
eventPromise(device, 'gattserverdisconnected'),
fake_peripheral.simulateGATTDisconnection(),
device.gatt.disconnect(),
device.gatt.disconnect(),
]))
// 3. Wait to catch disconnect events.
.then(() => new Promise(resolve => step_timeout(resolve, 50)))
// 4. Ensure there is exactly 1 disconnection recorded.
.then(() => assert_equals(num_events, 1)),
test_desc);
</script>

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
'use strict';
let test_desc = 'A device that reconnects during the gattserverdisconnected ' +
'event should still receive gattserverdisconnected events after ' +
're-connection.';
let device, fake_peripheral;
bluetooth_test(() => getHealthThermometerDevice()
.then(_ => ({device, fake_peripheral} = _))
// 1. Disconnect.
.then(() => new Promise(resolve => {
fake_peripheral.simulateGATTDisconnection();
device.addEventListener(
'gattserverdisconnected', function onDisconnected() {
device.removeEventListener('gattserverdisconnected', onDisconnected);
// 2. Reconnect.
fake_peripheral.setNextGATTConnectionResponse({
code: HCI_SUCCESS,
})
.then(() => device.gatt.connect())
.then(() => resolve());
});
}))
// 3. Disconnect after reconnecting.
.then(() => {
fake_peripheral.simulateGATTDisconnection();
return eventPromise(device, 'gattserverdisconnected')
}), test_desc);
</script>

View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
'use strict';
const test_desc_idl = 'BluetoothDevice IDL test.';
test(() => {
assert_throws(new TypeError(), () => new BluetoothDevice(),
'the constructor should not be callable with "new"');
assert_throws(new TypeError(), () => BluetoothDevice(),
'the constructor should not be callable');
}, test_desc_idl);
const test_desc_attr = 'BluetoothDevice attributes.';
let device;
bluetooth_test(() => getHealthThermometerDevice()
.then(({device}) => {
assert_equals(device.constructor.name, 'BluetoothDevice');
var old_device_id = device.id;
assert_throws(new TypeError(), () => device.id = 'overwritten',
'the device id should not be writable');
assert_throws(new TypeError(), () => device.name = 'overwritten',
'the device name should not be writable');
assert_equals(device.id, old_device_id);
assert_equals(device.name, 'Health Thermometer');
}), test_desc_attr);
</script>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
'use strict';
const test_desc = 'Same parent device returned from multiple services.';
bluetooth_test(() => getTwoHealthThermometerServicesDevice({
filters: [{services: ['health_thermometer']}]
})
.then(({device}) => device.gatt.getPrimaryServices('health_thermometer'))
.then(([service1, service2]) =>
assert_equals(service1.device, service2.device)),
test_desc);
</script>

View file

@ -0,0 +1,17 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
<script>
'use strict';
const test_desc = '[SameObject] test for BluetoothRemoteGATTService device.';
bluetooth_test(() => getHealthThermometerDevice({
filters: [{services: ['health_thermometer']}]
})
.then(({device}) => device.gatt.getPrimaryService('health_thermometer'))
.then(service => assert_equals(service.device, service.device)),
test_desc);
</script>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<title>The copy event</title>
<link rel="help" href="https://w3c.github.io/clipboard-apis/#clipboard-event-copy">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<p>Select and copy any part of this text to continue.
<script>
setup({explicit_timeout: true});
async_test(t => {
document.oncopy = t.step_func_done(event => {
// Nothing can be asserted about the event target until
// https://github.com/w3c/clipboard-apis/issues/70 is resolved.
// assert_equals(event.target, document.body, "event.target");
assert_true(event.isTrusted, "event.isTrusted");
assert_true(event.composed, "event.composed");
});
});
</script>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<title>The cut event</title>
<link rel="help" href="https://w3c.github.io/clipboard-apis/#clipboard-event-cut">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<input value="Select and cut any part of this text to continue" size="100">
<script>
setup({explicit_timeout: true});
async_test(t => {
document.oncut = t.step_func_done(event => {
// Nothing can be asserted about the event target until
// https://github.com/w3c/clipboard-apis/issues/70 is resolved.
// assert_equals(event.target, document.body, "event.target");
assert_true(event.isTrusted, "event.isTrusted");
assert_true(event.composed, "event.composed");
});
});
</script>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<title>The paste event</title>
<link rel="help" href="https://w3c.github.io/clipboard-apis/#clipboard-event-paste">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<input placeholder="Paste any text here to continue" size="100">
<p>Some pre-selected text to copy for convenience</p>
<script>
setup({explicit_timeout: true});
async_test(t => {
getSelection().selectAllChildren(document.querySelector("p"));
document.onpaste = t.step_func_done(event => {
// Nothing can be asserted about the event target until
// https://github.com/w3c/clipboard-apis/issues/70 is resolved.
// assert_equals(event.target, document.body, "event.target");
assert_true(event.isTrusted, "event.isTrusted");
assert_true(event.composed, "event.composed");
});
});
</script>

View file

@ -0,0 +1,67 @@
<!DOCTYPE html>
<html>
<head>
<title>Embedded Enforcement: Sec-Required-CSP header.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/testharness-helper.sub.js"></script>
</head>
<body>
<script>
var tests = [
{ "name": "Test same policy for both iframes",
"csp1": "script-src 'unsafe-inline';",
"csp2": "script-src 'unsafe-inline';",
"expected1": "script-src 'unsafe-inline';",
"expected2": "script-src 'unsafe-inline';"},
{ "name": "Test more restrictive policy on second iframe",
"csp1": "script-src 'unsafe-inline';",
"csp2": "script-src 'unsafe-inline'; style-src 'self';",
"expected1": "script-src 'unsafe-inline';",
"expected2": "script-src 'unsafe-inline'; style-src 'self';"},
{ "name": "Test less restrictive policy on second iframe",
"csp1": "script-src 'unsafe-inline'; style-src 'self';",
"csp2": "script-src 'unsafe-inline';",
"expected1": "script-src 'unsafe-inline'; style-src 'self';",
"expected2": "script-src 'unsafe-inline'; style-src 'self';"},
{ "name": "Test no policy on second iframe",
"csp1": "script-src 'unsafe-inline'; style-src 'self';",
"csp2": "",
"expected1": "script-src 'unsafe-inline'; style-src 'self';",
"expected2": "script-src 'unsafe-inline'; style-src 'self';"},
{ "name": "Test no policy on first iframe",
"csp1": "",
"csp2": "script-src 'unsafe-inline'; style-src 'self';",
"expected1": null,
"expected2": "script-src 'unsafe-inline'; style-src 'self';"},
{ "name": "Test invalid policy on first iframe (bad directive)",
"csp1": "default-src http://example.com; invalid-policy-name http://example.com",
"csp2": "script-src 'unsafe-inline'; style-src 'self';",
"expected1": null,
"expected2": "script-src 'unsafe-inline'; style-src 'self';"},
{ "name": "Test invalid policy on first iframe (report directive)",
"csp1": "script-src 'unsafe-inline'; report-uri resources/dummy-report.php",
"csp2": "script-src 'unsafe-inline'; style-src 'self';",
"expected1": null,
"expected2": "script-src 'unsafe-inline'; style-src 'self';"},
{ "name": "Test invalid policy on second iframe (bad directive)",
"csp1": "script-src 'unsafe-inline'; style-src 'self';",
"csp2": "default-src http://example.com; invalid-policy-name http://example.com",
"expected1": "script-src 'unsafe-inline'; style-src 'self';",
"expected2": "script-src 'unsafe-inline'; style-src 'self';"},
{ "name": "Test invalid policy on second iframe (report directive)",
"csp1": "script-src 'unsafe-inline'; style-src 'self';",
"csp2": "script-src 'unsafe-inline'; report-uri resources/dummy-report.php",
"expected1": "script-src 'unsafe-inline'; style-src 'self';",
"expected2": "script-src 'unsafe-inline'; style-src 'self';"},
];
tests.forEach(test => {
async_test(t => {
var url = generateURLStringWithSecondIframeParams(Host.SAME_ORIGIN, PolicyHeader.REQUIRED_CSP, test.csp2);
assert_required_csp(t, url, test.csp1, [test.expected1, test.expected2]);
}, "Test same origin: " + test.name);
});
</script>
</body>
</html>

View file

@ -58,25 +58,25 @@
tests.forEach(test => {
async_test(t => {
var url = generateURLString(Host.SAME_ORIGIN, PolicyHeader.REQUIRED_CSP);
assert_required_csp(t, url, test.csp, test.expected);
assert_required_csp(t, url, test.csp, [test.expected]);
}, "Test same origin: " + test.name);
async_test(t => {
var url = generateURLString(Host.SAME_ORIGIN, PolicyHeader.REQUIRED_CSP);
var redirect_url = generateRedirect(Host.SAME_ORIGIN, url);
assert_required_csp(t, redirect_url, test.csp, test.expected);
assert_required_csp(t, redirect_url, test.csp, [test.expected]);
}, "Test same origin redirect: " + test.name);
async_test(t => {
var url = generateURLString(Host.SAME_ORIGIN, PolicyHeader.REQUIRED_CSP);
var redirect_url = generateRedirect(Host.CROSS_ORIGIN, url);
assert_required_csp(t, redirect_url, test.csp, test.expected);
assert_required_csp(t, redirect_url, test.csp, [test.expected]);
}, "Test cross origin redirect: " + test.name);
async_test(t => {
var url = generateURLString(Host.CROSS_ORIGIN, PolicyHeader.REQUIRED_CSP);
var redirect_url = generateRedirect(Host.CROSS_ORIGIN, url);
assert_required_csp(t, redirect_url, test.csp, test.expected);
assert_required_csp(t, redirect_url, test.csp, [test.expected]);
}, "Test cross origin redirect of cross origin iframe: " + test.name);
async_test(t => {

View file

@ -3,13 +3,37 @@ def main(request, response):
header = request.headers.get("Sec-Required-CSP");
message = {}
message['required_csp'] = header if header else None
second_level_iframe_code = ""
if "include_second_level_iframe" in request.GET:
if "second_level_iframe_csp" in request.GET and request.GET["second_level_iframe_csp"] <> "":
second_level_iframe_code = '''<script>
var i2 = document.createElement('iframe');
i2.src = 'echo-required-csp.py';
i2.csp = "{0}";
document.body.appendChild(i2);
</script>'''.format(request.GET["second_level_iframe_csp"])
else:
second_level_iframe_code = '''<script>
var i2 = document.createElement('iframe');
i2.src = 'echo-required-csp.py';
document.body.appendChild(i2);
</script>'''
return [("Content-Type", "text/html"), ("Allow-CSP-From", "*")], '''
<!DOCTYPE html>
<html>
<head>
<!--{2}-->
<script>
window.addEventListener('message', function(e) {{
window.parent.postMessage(e.data, '*');
}});
window.parent.postMessage({0}, '*');
</script>
</head>
<body>
{1}
</body>
</html>
'''.format(json.dumps(message))
'''.format(json.dumps(message), second_level_iframe_code, str(request.headers))

View file

@ -34,16 +34,25 @@ function getSecureCrossOrigin() {
return url.toString();
}
function generateURL(host, path) {
function generateURL(host, path, include_second_level_iframe, second_level_iframe_csp) {
var url = new URL("http://{{host}}:{{ports[http][0]}}/content-security-policy/embedded-enforcement/support/");
url.hostname = host == Host.SAME_ORIGIN ? "{{host}}" : "{{domains[天気の良い日]}}";
url.pathname += path;
if (include_second_level_iframe) {
url.searchParams.append("include_second_level_iframe", "");
if (second_level_iframe_csp)
url.searchParams.append("second_level_iframe_csp", second_level_iframe_csp);
}
return url;
}
function generateURLString(host, path) {
return generateURL(host, path).toString();
return generateURL(host, path, false, "").toString();
}
function generateURLStringWithSecondIframeParams(host, path, second_level_iframe_csp) {
return generateURL(host, path, true, second_level_iframe_csp).toString();
}
function generateRedirect(host, target) {
@ -77,8 +86,13 @@ function assert_required_csp(t, url, csp, expected) {
window.addEventListener('message', t.step_func(e => {
if (e.source != i.contentWindow || !('required_csp' in e.data))
return;
assert_equals(e.data['required_csp'], expected);
t.done();
if (expected.indexOf(e.data['required_csp']) == -1)
assert_unreached('Child iframes have unexpected csp:"' + e.data['required_csp'] + '"');
expected.splice(expected.indexOf(e.data['required_csp']), 1);
if (expected.length == 0)
t.done();
}));
document.body.appendChild(i);

View file

@ -0,0 +1,34 @@
<meta charset=utf-8>
<title>CSS Animations Test: requirement on pending style changes - getAnimations</title>
<link rel="help" href="https://drafts.csswg.org/css-animations-2/#requirements-on-pending-style-changes">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
@keyframes anim {}
.animate {
animation: anim 10s;
}
</style>
<div id="target"></div>
<script>
test (t => {
assert_equals(target.getAnimations().length, 0, 'Test precondition.');
target.classList.add('animate');
assert_equals(target.getAnimations().length, 1,
'target.getAnimations() should include the CSS animation after animate class added.');
target.classList.remove('animate');
}, 'Animatable::getAnimations() should be able to see a style-created CSS animation immediately');
test(t => {
assert_equals(document.getAnimations().length, 0, 'Test precondition.');
target.classList.add('animate');
assert_equals(document.getAnimations().length, 1,
'document.getAnimations() should include the CSS animation after animate class added.');
target.classList.remove('animate');
}, 'Document::getAnimations() should be able to see a style-created CSS animation immediately');
</script>

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<title>Absolutely positioned child with auto position in vertical-rl ltr flexbox</title>
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#abspos-items" title="4.1. Absolutely-Positioned Flex Children">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<style>
.flex {
display: flex;
position: relative;
writing-mode: horizontal-tb;
direction: ltr;
width: 100px;
height: 100px;
border: solid white;
border-left-width: 20px;
left: -20px;
border-top-width: 5px;
top: -5px;
border-right-width: 10px;
border-bottom-width: 15px;
background: red;
}
.flex > div {
position: absolute;
width: 100%;
height: 100%;
background: green;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="flex">
<div></div>
</div>

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<title>Absolutely positioned child with auto position in vertical-rl ltr flexbox</title>
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#abspos-items" title="4.1. Absolutely-Positioned Flex Children">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<style>
.flex {
display: flex;
position: relative;
writing-mode: horizontal-tb;
direction: rtl;
width: 100px;
height: 100px;
border: solid white;
border-left-width: 20px;
left: -20px;
border-top-width: 5px;
top: -5px;
border-right-width: 10px;
border-bottom-width: 15px;
background: red;
}
.flex > div {
position: absolute;
width: 100%;
height: 100%;
background: green;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="flex">
<div></div>
</div>

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<title>Absolutely positioned child with auto position in vertical-rl ltr flexbox</title>
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#abspos-items" title="4.1. Absolutely-Positioned Flex Children">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<style>
.flex {
display: flex;
position: relative;
writing-mode: vertical-lr;
direction: ltr;
width: 100px;
height: 100px;
border: solid white;
border-left-width: 20px;
left: -20px;
border-top-width: 5px;
top: -5px;
border-right-width: 10px;
border-bottom-width: 15px;
background: red;
}
.flex > div {
position: absolute;
width: 100%;
height: 100%;
background: green;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="flex">
<div></div>
</div>

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<title>Absolutely positioned child with auto position in vertical-rl ltr flexbox</title>
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#abspos-items" title="4.1. Absolutely-Positioned Flex Children">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<style>
.flex {
display: flex;
position: relative;
writing-mode: vertical-lr;
direction: rtl;
width: 100px;
height: 100px;
border: solid white;
border-left-width: 20px;
left: -20px;
border-top-width: 5px;
top: -5px;
border-right-width: 10px;
border-bottom-width: 15px;
background: red;
}
.flex > div {
position: absolute;
width: 100%;
height: 100%;
background: green;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="flex">
<div></div>
</div>

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<title>Absolutely positioned child with auto position in vertical-rl ltr flexbox</title>
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#abspos-items" title="4.1. Absolutely-Positioned Flex Children">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<style>
.flex {
display: flex;
position: relative;
writing-mode: vertical-rl;
direction: ltr;
width: 100px;
height: 100px;
border: solid white;
border-left-width: 20px;
left: -20px;
border-top-width: 5px;
top: -5px;
border-right-width: 10px;
border-bottom-width: 15px;
background: red;
}
.flex > div {
position: absolute;
width: 100%;
height: 100%;
background: green;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="flex">
<div></div>
</div>

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<title>Absolutely positioned child with auto position in vertical-rl ltr flexbox</title>
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#abspos-items" title="4.1. Absolutely-Positioned Flex Children">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<style>
.flex {
display: flex;
position: relative;
writing-mode: vertical-lr;
direction: rtl;
width: 100px;
height: 100px;
border: solid white;
border-left-width: 20px;
left: -20px;
border-top-width: 5px;
top: -5px;
border-right-width: 10px;
border-bottom-width: 15px;
background: red;
}
.flex > div {
position: absolute;
width: 100%;
height: 100%;
background: green;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div class="flex">
<div></div>
</div>

View file

@ -0,0 +1,30 @@
<!doctype html>
<meta charset="utf-8">
<title>'background-color' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('background-color', [
{
syntax: 'currentcolor',
// computes to a <color>, which is not supported in level 1
computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
}
]);
// <color>s are not supported in level 1
runUnsupportedPropertyTests('background-color', [
'red', '#bbff00', 'rgb(255, 255, 128)', 'hsl(50, 33%, 25%)',
'transparent'
]);
</script>

View file

@ -0,0 +1,33 @@
<!doctype html>
<meta charset="utf-8">
<title>'border-color' properties</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
for (const prefix of ['top', 'left', 'right', 'bottom']) {
runPropertyTests(`border-${prefix}-color`, [
{
syntax: 'currentcolor',
// computes to a <color>, which is not supported in level 1
computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
}
]);
// <color>s are not supported in level 1
runUnsupportedPropertyTests(`border-${prefix}-color`, [
'red', '#bbff00', 'rgb(255, 255, 128)', 'hsl(50, 33%, 25%)',
'transparent'
]);
}
</script>

View file

@ -0,0 +1,35 @@
<!doctype html>
<meta charset="utf-8">
<title>'caret-color' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('caret-color', [
{
syntax: 'currentcolor',
// computes to a <color>, which is not supported in level 1
computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
},
{
syntax: 'auto',
// computes to a <color>, which is not supported in level 1
computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
}
]);
// <color>s are not supported in level 1
runUnsupportedPropertyTests('caret-color', [
'red', '#bbff00', 'rgb(255, 255, 128)', 'hsl(50, 33%, 25%)',
'transparent'
]);
</script>

View file

@ -0,0 +1,30 @@
<!doctype html>
<meta charset="utf-8">
<title>'color' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('color', [
{
syntax: 'currentcolor',
// computes to a <color>, which is not supported in level 1
computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
}
]);
// <color>s are not supported in level 1
runUnsupportedPropertyTests('color', [
'red', '#bbff00', 'rgb(255, 255, 128)', 'hsl(50, 33%, 25%)',
'transparent'
]);
</script>

View file

@ -0,0 +1,30 @@
<!doctype html>
<meta charset="utf-8">
<title>'column-rule-color' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('column-rule-color', [
{
syntax: 'currentcolor',
// computes to a <color>, which is not supported in level 1
computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
}
]);
// <color>s are not supported in level 1
runUnsupportedPropertyTests('column-rule-color', [
'red', '#bbff00', 'rgb(255, 255, 128)', 'hsl(50, 33%, 25%)',
'transparent'
]);
</script>

View file

@ -0,0 +1,31 @@
<!doctype html>
<meta charset="utf-8">
<title>'outline-color' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('outline-color', [
{
syntax: 'currentcolor',
// computes to a <color>, which is not supported in level 1
computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
}
// FIXME: browsers may or may not support 'invert' keyword.
]);
// <color>s are not supported in level 1
runUnsupportedPropertyTests('outline-color', [
'red', '#bbff00', 'rgb(255, 255, 128)', 'hsl(50, 33%, 25%)',
'transparent'
]);
</script>

View file

@ -228,6 +228,25 @@ function testPropertyInvalid(propertyName, examples, description) {
}, `Setting '${propertyName}' to ${description} throws TypeError`);
}
// Test that styleMap.get/.set roundtrips correctly for unsupported values.
function testUnsupportedValue(propertyName, cssText) {
test(t => {
let element1 = createDivWithStyle(t);
let element2 = createDivWithStyle(t);
element1.style[propertyName] = cssText;
const result = element1.attributeStyleMap.get(propertyName);
assert_not_equals(result, null,
'Unsupported value must not be null');
assert_class_string(result, 'CSSStyleValue',
'Unsupported value must be a CSSStyleValue and not one of its subclasses');
element2.attributeStyleMap.set(propertyName, result);
assert_equals(element2.style[propertyName], element1.style[propertyName],
'Unsupported value can be set on different element');
}, `'${propertyName}' does not supported '${cssText}'`);
}
function createKeywordExample(keyword) {
return {
description: `the '${keyword}' keyword`,
@ -297,3 +316,13 @@ function runPropertyTests(propertyName, testCases) {
}
}
}
// Check that |propertyName| doesn't "support" examples in |testExamples|.
// |testExamples| is a list of CSS string values. An "unsupported" value
// doesn't have a corresponding Typed OM representation. It normalizes as
// the base CSSStyleValue.
function runUnsupportedPropertyTests(propertyName, testExamples) {
for (const cssText of testExamples) {
testUnsupportedValue(propertyName, cssText);
}
}

View file

@ -0,0 +1,30 @@
<!doctype html>
<meta charset="utf-8">
<title>'text-decoration-color' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('text-decoration-color', [
{
syntax: 'currentcolor',
// computes to a <color>, which is not supported in level 1
computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
}
]);
// <color>s are not supported in level 1
runUnsupportedPropertyTests('text-decoration-color', [
'red', '#bbff00', 'rgb(255, 255, 128)', 'hsl(50, 33%, 25%)',
'transparent'
]);
</script>

View file

@ -0,0 +1,30 @@
<!doctype html>
<meta charset="utf-8">
<title>'text-emphasis-color' property</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-get">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-stylepropertymap-set">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#property-stle-value-normalization">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../resources/testhelper.js"></script>
<script src="resources/testsuite.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';
runPropertyTests('text-emphasis-color', [
{
syntax: 'currentcolor',
// computes to a <color>, which is not supported in level 1
computed: (_, result) => assert_class_string(result, 'CSSStyleValue')
}
]);
// <color>s are not supported in level 1
runUnsupportedPropertyTests('text-emphasis-color', [
'red', '#bbff00', 'rgb(255, 255, 128)', 'hsl(50, 33%, 25%)',
'transparent'
]);
</script>

View file

@ -9,6 +9,7 @@ const testList = [
{ tag_name: 'a-a', defined: false },
{ tag_name: 'font-face', defined: true },
{ tag_name: 'abbr', is: 'my-abbr', defined: false },
{ tag_name: 'p', is: '', defined: false },
];
// Setup iframe to test the parser.
@ -20,7 +21,7 @@ iframe.srcdoc = `<style>
:defined { color:${defined}; }
:not(:defined) { color:${not_defined}; }
</style>`
+ testList.map(d => `<${d.tag_name}${d.is ? ' is=' + d.is : ''}></${d.tag_name}>`).join('');
+ testList.map(d => `<${d.tag_name}${d.is !== undefined ? ' is=' + d.is : ''}></${d.tag_name}>`).join('');
setup({ explicit_done: true });
iframe.onload = () => {
const doc = iframe.contentDocument;
@ -31,7 +32,8 @@ iframe.onload = () => {
`<${data.tag_name}${data.is ? ' is=' + data.is : ''}>`);
// Test DOM createElement() methods.
test_defined_for_createElement(data.defined, !data.defined, doc, data.tag_name, data.is);
let try_upgrade = !data.defined && (data.is === undefined || data.is.length > 0);
test_defined_for_createElement(data.defined, try_upgrade, doc, data.tag_name, data.is);
// Documents without browsing context should behave the same.
test_defined_for_createElement(data.defined, false, doc_without_browsing_context, data.tag_name, data.is, 'Without browsing context: ');
@ -41,21 +43,22 @@ iframe.onload = () => {
};
function test_defined_for_createElement(defined, should_test_change, doc, tag_name, is, description = '') {
let is_desc = is ? `, { is: "${is}" }` : '';
let has_is = is !== undefined;
let is_desc = has_is ? `, { is: "${is}" }` : '';
// Test document.createElement().
let element = is ? doc.createElement(tag_name, { is: is }) : doc.createElement(tag_name);
let element = has_is ? doc.createElement(tag_name, { is: is }) : doc.createElement(tag_name);
doc.body.appendChild(element);
test_defined(defined, element, `${description}createElement("${tag_name}"${is_desc})`);
// Test document.createElementNS().
let html_element = is ? doc.createElementNS('http://www.w3.org/1999/xhtml', tag_name, { is: is })
: doc.createElementNS('http://www.w3.org/1999/xhtml', tag_name);
let html_element = has_is ? doc.createElementNS('http://www.w3.org/1999/xhtml', tag_name, { is: is })
: doc.createElementNS('http://www.w3.org/1999/xhtml', tag_name);
doc.body.appendChild(html_element);
test_defined(defined, html_element, `${description}createElementNS("http://www.w3.org/1999/xhtml", "${tag_name}"${is_desc})`);
// If the element namespace is not HTML, it should be "uncustomized"; i.e., "defined".
let svg_element = is ? doc.createElementNS('http://www.w3.org/2000/svg', tag_name, { is: is })
: doc.createElementNS('http://www.w3.org/2000/svg', tag_name);
let svg_element = has_is ? doc.createElementNS('http://www.w3.org/2000/svg', tag_name, { is: is })
: doc.createElementNS('http://www.w3.org/2000/svg', tag_name);
doc.body.appendChild(svg_element);
test_defined(true, svg_element, `${description}createElementNS("http://www.w3.org/2000/svg", "${tag_name}"${is_desc})`);

View file

@ -12,6 +12,8 @@ async_test(t => {
// Enter fullscreen for the iframe's body element.
trusted_request(t, iframeDoc.body, document.body);
document.onfullscreenchange = t.step_func(() => {
assert_equals(document.fullscreenElement, iframe, "document's initial fullscreen element");
assert_equals(iframeDoc.fullscreenElement, iframeDoc.body, "iframe's initial fullscreen element");
// Then, move the outer document's body into the iframe. This is an unusual
// thing to do, but means that the iframe is removed from its document and
@ -20,12 +22,15 @@ async_test(t => {
// If we exit in an orderly fashion, that's all one can ask for.
document.onfullscreenchange = t.step_func_done(() => {
assert_equals(document.fullscreenElement, null, "document's fullscreen element");
assert_equals(document.fullscreenElement, null, "document's final fullscreen element");
// the iframe's contentDocument has become undefined, but the reference
// we're holding on to should not have a fullscreen element either.
assert_equals(iframe.contentDocuemnt, undefined, "iframe's content document");
assert_equals(iframeDoc.fullscreenElement, null, "iframe's fullscreen element");
// Because the iframe was removed, its browsing context was discarded and
// its contentDocument has become null. Because that browsing context was
// neither a descendant browsing context nor had an active document,
// nothing at all was done with it in the exit fullscreen algorithm, so
// its fullscreenElement is unchanged.
assert_equals(iframe.contentDocument, null, "iframe's content document");
assert_equals(iframeDoc.fullscreenElement, iframeDoc.body, "iframe's final fullscreen element");
});
});
});

View file

@ -1,5 +1,6 @@
[Constructor(optional SensorOptions options), SecureContext, Exposed=Window]
[Constructor(optional GeolocationSensorOptions options), SecureContext, Exposed=Window]
interface GeolocationSensor : Sensor {
static Promise<GeolocationSensorReading> read(optional ReadOptions readOptions);
readonly attribute unrestricted double? latitude;
readonly attribute unrestricted double? longitude;
readonly attribute unrestricted double? altitude;
@ -8,3 +9,22 @@ interface GeolocationSensor : Sensor {
readonly attribute unrestricted double? heading;
readonly attribute unrestricted double? speed;
};
dictionary GeolocationSensorOptions : SensorOptions {
// placeholder for GeolocationSensor-specific options
};
dictionary ReadOptions : GeolocationSensorOptions {
AbortSignal? signal;
};
dictionary GeolocationSensorReading {
DOMHighResTimeStamp? timestamp;
double? latitude;
double? longitude;
double? altitude;
double? accuracy;
double? altitudeAccuracy;
double? heading;
double? speed;
};

View file

@ -12,28 +12,33 @@ function crossOriginUrl(path) {
return get_host_info()['HTTPS_REMOTE_ORIGIN'] + base_path() + path;
}
function verify(performance, resource, mode, description) {
var url = mode === 'cross-origin' ? crossOriginUrl(resource)
: resourceUrl(resource);
var entryList = performance.getEntries();
var entry = performance.getEntriesByName(url)[0];
assert_greater_than(entry.workerStart, 0, description);
assert_greater_than_equal(entry.workerStart, entry.startTime, description);
assert_less_than_equal(entry.workerStart, entry.fetchStart, description);
if (mode === 'cross-origin') {
assert_equals(entry.responseStart, 0, description);
assert_greater_than_equal(entry.responseEnd, entry.fetchStart, description);
} else {
assert_greater_than_equal(entry.responseStart, entry.fetchStart, description);
assert_greater_than_equal(entry.responseEnd, entry.responseStart, description);
function verify(options) {
var url = options.mode === 'cross-origin' ? crossOriginUrl(options.resource)
: resourceUrl(options.resource);
var entryList = options.performance.getEntriesByName(url);
if (entryList.length === 0 && options.allow_no_performance_entry) {
// The performance timeline may not have an entry for a resource
// which failed to load.
return;
}
assert_greater_than(entry.responseEnd, entry.fetchStart, description);
assert_greater_than(entry.duration, 0, description);
if (resource.indexOf('redirect.py') != -1) {
assert_less_than_equal(entry.workerStart, entry.redirectStart,
description);
var entry = entryList[0];
assert_greater_than(entry.workerStart, 0, options.description);
assert_greater_than_equal(entry.workerStart, entry.startTime, options.description);
assert_less_than_equal(entry.workerStart, entry.fetchStart, options.description);
if (options.mode === 'cross-origin') {
assert_equals(entry.responseStart, 0, options.description);
assert_greater_than_equal(entry.responseEnd, entry.fetchStart, options.description);
} else {
assert_equals(entry.redirectStart, 0, description);
assert_greater_than_equal(entry.responseStart, entry.fetchStart, options.description);
assert_greater_than_equal(entry.responseEnd, entry.responseStart, options.description);
}
assert_greater_than(entry.responseEnd, entry.fetchStart, options.description);
assert_greater_than(entry.duration, 0, options.description);
if (options.resource.indexOf('redirect.py') != -1) {
assert_less_than_equal(entry.workerStart, entry.redirectStart,
options.description);
} else {
assert_equals(entry.redirectStart, 0, options.description);
}
}
@ -52,19 +57,54 @@ async_test(function(t) {
})
.then(function(frame) {
var performance = frame.contentWindow.performance;
verify(performance, 'resources/dummy.js', 'same-origin',
'Generated response');
verify(performance, 'resources/empty.js', 'same-origin',
'Network fallback');
verify(performance, 'resources/redirect.py?Redirect=empty.js',
'same-origin', 'Redirect');
verify(performance, 'resources/missing.jpg', 'same-origin',
'Network fallback image');
verify({
performance: performance,
resource: 'resources/dummy.js',
mode: 'same-origin',
description: 'Generated response',
});
verify({
performance: performance,
resource: 'resources/empty.js',
mode: 'same-origin',
description: 'Network fallback',
});
verify({
performance: performance,
resource: 'resources/redirect.py?Redirect=empty.js',
mode: 'same-origin',
description: 'Redirect',
});
verify({
performance: performance,
resource: 'resources/square.png',
mode: 'same-origin',
description: 'Network fallback image',
});
// Test that worker start is available on cross-origin no-cors
// subresources.
verify(performance, 'resources/missing.jpg', 'cross-origin',
'Network fallback cross-origin image');
verify({
performance: performance,
resource: 'resources/square.png',
mode: 'cross-origin',
description: 'Network fallback cross-origin image',
});
// Tests for resouces which failed to load.
verify({
performance: performance,
resource: 'resources/missing.jpg',
mode: 'same-origin',
description: 'Network fallback load failure',
allow_no_performance_entry: true,
});
verify({
performance: performance,
resource: 'resources/missing.jpg',
mode: 'cross-origin',
description: 'Network fallback cross-origin load failure',
allow_no_performance_entry: true,
});
frame.remove();
return registration.unregister();

View file

@ -2,5 +2,7 @@
<script src="empty.js"></script>
<script src="dummy.js"></script>
<script src="redirect.py?Redirect=empty.js"></script>
<img src="square.png">
<img src="https://{{domains[www1]}}:{{ports[https][0]}}/service-workers/service-worker/resources/square.png">
<img src="missing.jpg">
<img src="https://{{domains[www1]}}:{{ports[https][0]}}/service-workers/service-worker/resources/missing.jpg">

View file

@ -211,7 +211,7 @@ class Firefox(Browser):
class Chrome(Browser):
"""Chrome-specific interface.
Includes installation, webdriver installation, and wptrunner setup methods.
Includes webdriver installation, and wptrunner setup methods.
"""
product = "chrome"
@ -284,9 +284,9 @@ class Chrome(Browser):
class ChromeAndroid(Browser):
"""Chrome-specific interface for android.
"""Chrome-specific interface for Android.
Includes installation, webdriver installation, and wptrunner setup methods.
Includes webdriver installation.
"""
product = "chrome_android"
@ -309,7 +309,7 @@ class ChromeAndroid(Browser):
class Opera(Browser):
"""Opera-specific interface.
Includes installation, webdriver installation, and wptrunner setup methods.
Includes webdriver installation, and wptrunner setup methods.
"""
product = "opera"
@ -386,10 +386,7 @@ class Opera(Browser):
class Edge(Browser):
"""Edge-specific interface.
Includes installation, webdriver installation, and wptrunner setup methods.
"""
"""Edge-specific interface."""
product = "edge"
requirements = "requirements_edge.txt"
@ -409,10 +406,7 @@ class Edge(Browser):
class InternetExplorer(Browser):
"""Internet Explorer-specific interface.
Includes installation, webdriver installation, and wptrunner setup methods.
"""
"""Internet Explorer-specific interface."""
product = "ie"
requirements = "requirements_ie.txt"
@ -432,10 +426,7 @@ class InternetExplorer(Browser):
class Servo(Browser):
"""Servo-specific interface.
Includes installation, webdriver installation, and wptrunner setup methods.
"""
"""Servo-specific interface."""
product = "servo"
requirements = "requirements_servo.txt"
@ -457,10 +448,7 @@ class Servo(Browser):
class Sauce(Browser):
"""Sauce-specific interface.
Includes installation, webdriver installation, and wptrunner setup methods.
"""
"""Sauce-specific interface."""
product = "sauce"
requirements = "requirements_sauce.txt"

View file

@ -1 +1 @@
requests==2.14.2
requests==2.18.4

View file

@ -1,3 +1,3 @@
mozprocess == 0.26
selenium == 3.9.0
requests
requests==2.18.4

View file

@ -8,17 +8,50 @@
// The following helper functions are called from RTCPeerConnection-helper.js:
// getTrackFromUserMedia
// doSignalingHandshake
// Create a RTCDTMFSender using getUserMedia()
// Connect the PeerConnection to another PC and wait until it is
// properly connected, so that DTMF can be sent.
function createDtmfSender(pc = new RTCPeerConnection()) {
var dtmfSender;
return getTrackFromUserMedia('audio')
.then(([track, mediaStream]) => {
const sender = pc.addTrack(track, mediaStream);
const dtmfSender = sender.dtmf;
dtmfSender = sender.dtmf;
assert_true(dtmfSender instanceof RTCDTMFSender,
'Expect audio sender.dtmf to be set to a RTCDTMFSender');
'Expect audio sender.dtmf to be set to a RTCDTMFSender');
// Note: spec bug open - https://github.com/w3c/webrtc-pc/issues/1774
// on whether sending should be possible before negotiation.
const pc2 = new RTCPeerConnection();
Object.defineProperty(pc, 'otherPc', { value: pc2 });
exchangeIceCandidates(pc, pc2);
return doSignalingHandshake(pc, pc2);
}).then(() => {
// Wait until dtmfSender.canInsertDTMF becomes true.
// Up to 150 ms has been observed in test. Wait 1 second
// in steps of 10 ms.
// Note: Using a short timeout and rejected promise in order to
// make test return a clear error message on failure.
return new Promise((resolve, reject) => {
let counter = 0;
let checkfunc = function() {
if (dtmfSender.canInsertDTMF) {
resolve();
} else {
if (counter >= 100) {
reject('Waited too long for canInsertDTMF');
return;
}
++counter;
step_timeout(checkfunc, 10);
}
};
checkfunc();
});
}).then(() => {
assert_true(dtmfSender.canInsertDTMF,
'Failed to create usable dtmfSender:');
return dtmfSender;
});
}
@ -89,12 +122,12 @@ function test_tone_change_events(testFunc, toneChanges, desc) {
t.step_func(() => {
t.done();
pc.close();
pc.otherPc.close();
}), expectedDuration + 100);
}
});
dtmfSender.addEventListener('tonechange', onToneChange);
testFunc(t, dtmfSender, pc);
})
.catch(t.step_func(err => {

View file

@ -55,7 +55,7 @@
*/
promise_test(t => {
return createDtmfSender()
.then(dtmfSender => {
.then(dtmfSender => {
dtmfSender.insertDTMF('');
dtmfSender.insertDTMF('012345689');
dtmfSender.insertDTMF('ABCD');

View file

@ -50,7 +50,7 @@
7. Fire an event named tonechange with a string consisting of tone at the
RTCDTMFSender object.
*/
test_tone_change_events(dtmfSender => {
test_tone_change_events((t, dtmfSender) => {
dtmfSender.insertDTMF('123');
}, [
['1', '23', 0],
@ -59,7 +59,7 @@
['', '', 170]
], 'insertDTMF() with default duration and intertoneGap should fire tonechange events at the expected time');
test_tone_change_events(dtmfSender => {
test_tone_change_events((t, dtmfSender) => {
dtmfSender.insertDTMF('abc', 100, 70);
}, [
['A', 'BC', 0],

View file

@ -1,5 +1,5 @@
<!DOCTYPE html>
<title>data URL shared worker</title>
<title>data URL shared workers</title>
<script src="/common/get-host-info.sub.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
@ -15,8 +15,8 @@ function assert_worker_sends_pass(test_desc, mime_type, worker_code) {
}, test_desc);
}
function assert_worker_throws(test_desc, worker_code, before_connect_worker_code) {
assert_worker_sends_pass(test_desc, '', `try { ${worker_code}; port.postMessage("FAIL"); } catch (e) { port.postMessage("PASS"); }`, before_connect_worker_code);
function assert_worker_throws(test_desc, worker_code) {
assert_worker_sends_pass(test_desc, '', `try { ${worker_code}; port.postMessage("FAIL"); } catch (e) { port.postMessage("PASS"); }`);
}
// Any MIME type allowed
@ -28,12 +28,17 @@ assert_worker_sends_pass('empty MIME allowed', '', 'port.postMessage("PASS")');
assert_worker_sends_pass('communication goes both ways', 'application/javascript', 'port.onmessage = function(e) { port.postMessage("PASS"); }');
// test access to storage APIs
// once https://github.com/w3c/IndexedDB/pull/150 lands, this is spec conforming
assert_worker_throws('indexedDB inaccessible', 'self.indexedDB.open("someDBName")');
assert_worker_throws('Web SQL Database inaccessible', 'self.openDatabase("someDBName", "1.0", "someDBName", 1);');
// https://w3c.github.io/IndexedDB/#dom-idbfactory-open
assert_worker_sends_pass('indexedDB is present', '', 'port.postMessage("indexedDB" in self ? "PASS" : "FAIL")');
assert_worker_throws('indexedDB is inaccessible', 'self.indexedDB.open("someDBName")');
// Other standardized storage APIs are either not exposed to workers
// (e.g. window.localStorage, window.sessionStorage), or are [SecureContext]
// (e.g. self.caches).
// 'data:' workers are cross-origin
assert_worker_sends_pass('cross-origin worker', '', 'fetch("/").then(() => port.postMessage("FAIL"), () => port.postMessage("PASS"))');
// 'data:' workers have opaque origin
assert_worker_sends_pass('worker has opaque origin', 'application/javascript', 'if (self.location.origin == "null") port.postMessage("PASS"); else { port.postMessage("FAIL"); }');

View file

@ -1,8 +1,7 @@
<!DOCTYPE html>
<title>Test workers can be started with a data URL</title>
<title>data URL dedicated workers</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
// Helper assert functions -START-
function assert_worker_sends_pass(test_desc, mime_type, worker_code) {
@ -36,7 +35,7 @@ function assert_worker_construction_fails(test_desc, mime_type, worker_code) {
// Actual tests -START-
// Any MIME type
// Any MIME type allowed
assert_worker_sends_pass('application/javascript MIME allowed', 'application/javascript', 'self.postMessage("PASS")');
assert_worker_sends_pass('text/plain MIME allowed', 'text/plain', 'self.postMessage("PASS")');
assert_worker_sends_pass('empty MIME allowed', '', 'self.postMessage("PASS")');
@ -45,9 +44,14 @@ assert_worker_sends_pass('empty MIME allowed', '', 'self.postMessage("PASS")');
assert_worker_sends_pass('communication goes both ways', 'application/javascript', 'onmessage = function(e) { self.postMessage("PASS"); }');
// test access to storage APIs
// once https://github.com/w3c/IndexedDB/pull/150 lands, this is spec conforming
assert_worker_throws('indexedDB inaccessible', 'self.indexedDB.open("someDBName")');
assert_worker_throws('Web SQL Database inaccessible', 'self.openDatabase("someDBName", "1.0", "someDBName", 1);');
// https://w3c.github.io/IndexedDB/#dom-idbfactory-open
assert_worker_sends_pass('indexedDB is present', '', 'self.postMessage("indexedDB" in self ? "PASS" : "FAIL")');
assert_worker_throws('indexedDB is inaccessible', 'self.indexedDB.open("someDBName")');
// Other standardized storage APIs are either not exposed to workers
// (e.g. window.localStorage, window.sessionStorage), or are [SecureContext]
// (e.g. self.caches).
// 'data:' workers are cross-origin
assert_worker_sends_pass('cross-origin worker', '', 'fetch("/").then(() => self.postMessage("FAIL"), () => self.postMessage("PASS"))');