Update web-platform-tests to revision 719721f655102bcd24d45eba91339eb2d7dbc591
|
@ -14611,18 +14611,6 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"pointerevents/pointerevent_attributes_hoverable_pointers-manual.html": [
|
||||
[
|
||||
"pointerevents/pointerevent_attributes_hoverable_pointers-manual.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"pointerevents/pointerevent_attributes_nohover_pointers-manual.html": [
|
||||
[
|
||||
"pointerevents/pointerevent_attributes_nohover_pointers-manual.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"pointerevents/pointerevent_capture_suppressing_mouse-manual.html": [
|
||||
[
|
||||
"pointerevents/pointerevent_capture_suppressing_mouse-manual.html",
|
||||
|
@ -135139,6 +135127,18 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-position/position-absolute-dynamic-static-position-floats-004.html": [
|
||||
[
|
||||
"css/css-position/position-absolute-dynamic-static-position-floats-004.html",
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square-only.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-position/position-absolute-dynamic-static-position-margin-001.html": [
|
||||
[
|
||||
"css/css-position/position-absolute-dynamic-static-position-margin-001.html",
|
||||
|
@ -141863,6 +141863,54 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-003.html": [
|
||||
[
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-003.html",
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-004.html": [
|
||||
[
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-004.html",
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-005.html": [
|
||||
[
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-005.html",
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-006.html": [
|
||||
[
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-006.html",
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-replaced-children-001.html": [
|
||||
[
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-replaced-children-001.html",
|
||||
|
@ -142875,6 +142923,18 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/hyphens/hyphens-overflow-001.html": [
|
||||
[
|
||||
"css/css-text/hyphens/hyphens-overflow-001.html",
|
||||
[
|
||||
[
|
||||
"/css/css-text/hyphens/reference/hyphens-overflow-001-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"css/css-text/hyphens/hyphens-shaping-001.html": [
|
||||
[
|
||||
"css/css-text/hyphens/hyphens-shaping-001.html",
|
||||
|
@ -252959,6 +253019,9 @@
|
|||
"css/css-text/hyphens/reference/hyphens-auto-001-ref.html": [
|
||||
[]
|
||||
],
|
||||
"css/css-text/hyphens/reference/hyphens-overflow-001-ref.html": [
|
||||
[]
|
||||
],
|
||||
"css/css-text/hyphens/reference/hyphens-shaping-001-ref.html": [
|
||||
[]
|
||||
],
|
||||
|
@ -264743,6 +264806,9 @@
|
|||
"fetch/sec-metadata/resources/fetch-via-serviceworker--respondWith--sw.js": [
|
||||
[]
|
||||
],
|
||||
"fetch/sec-metadata/resources/go-back.html": [
|
||||
[]
|
||||
],
|
||||
"fetch/sec-metadata/resources/helper.js": [
|
||||
[]
|
||||
],
|
||||
|
@ -284471,6 +284537,9 @@
|
|||
"webaudio/the-audio-api/the-audioprocessingevent-interface/.gitkeep": [
|
||||
[]
|
||||
],
|
||||
"webaudio/the-audio-api/the-audioworklet-interface/processors/active-processing.js": [
|
||||
[]
|
||||
],
|
||||
"webaudio/the-audio-api/the-audioworklet-interface/processors/add-offset.js": [
|
||||
[]
|
||||
],
|
||||
|
@ -342895,6 +342964,12 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"fetch/sec-metadata/history.tentative.https.sub.html": [
|
||||
[
|
||||
"fetch/sec-metadata/history.tentative.https.sub.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"fetch/sec-metadata/iframe.tentative.https.sub.html": [
|
||||
[
|
||||
"fetch/sec-metadata/iframe.tentative.https.sub.html",
|
||||
|
@ -375156,6 +375231,22 @@
|
|||
}
|
||||
]
|
||||
],
|
||||
"pointerevents/pointerevent_attributes_hoverable_pointers.html": [
|
||||
[
|
||||
"pointerevents/pointerevent_attributes_hoverable_pointers.html",
|
||||
{
|
||||
"testdriver": true
|
||||
}
|
||||
]
|
||||
],
|
||||
"pointerevents/pointerevent_attributes_nohover_pointers.html": [
|
||||
[
|
||||
"pointerevents/pointerevent_attributes_nohover_pointers.html",
|
||||
{
|
||||
"testdriver": true
|
||||
}
|
||||
]
|
||||
],
|
||||
"pointerevents/pointerevent_boundary_events_at_implicit_release_hoverable_pointers.html": [
|
||||
[
|
||||
"pointerevents/pointerevent_boundary_events_at_implicit_release_hoverable_pointers.html",
|
||||
|
@ -535502,7 +535593,7 @@
|
|||
"reftest"
|
||||
],
|
||||
"css/css-color/parsing/color-computed.html": [
|
||||
"6c0e130196d0be6d10336c550f9e3d12e6f89b4c",
|
||||
"973b454aaddd25dadbe5a7309c9d9bb131c1abbf",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-color/parsing/color-invalid.html": [
|
||||
|
@ -535510,11 +535601,11 @@
|
|||
"testharness"
|
||||
],
|
||||
"css/css-color/parsing/color-valid.html": [
|
||||
"70e2450c77f26391ddea1c42dbed4de5d0f817b5",
|
||||
"48e97561f40c370acd88bf41220b5482eedf245e",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-color/parsing/opacity-computed.html": [
|
||||
"1ac8b5e4aa27847a51c2c588afe99f9094cfedc5",
|
||||
"ba93181754a17803e29fed0d0d794e0463aaa8ed",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-color/parsing/opacity-invalid.html": [
|
||||
|
@ -535522,7 +535613,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"css/css-color/parsing/opacity-valid.html": [
|
||||
"f9bb9b65014d86c97f0072de68de9581e87ed8d1",
|
||||
"daa8d8647f17ec48a1c648dfaea48bc8373c20ea",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-color/rebeccapurple-ref.html": [
|
||||
|
@ -559653,6 +559744,10 @@
|
|||
"fa7cc695c361f5b43300b42f3c5872e89b5c0879",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-position/position-absolute-dynamic-static-position-floats-004.html": [
|
||||
"3ccd1462fd1530e29b43b3710b0708d270818a8f",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-position/position-absolute-dynamic-static-position-margin-001.html": [
|
||||
"78b0ced9df2fd0ea299a7cc35e9ca0c360f453fa",
|
||||
"reftest"
|
||||
|
@ -565901,6 +565996,22 @@
|
|||
"19b02b20315e5600546b8e8d618b17e87abaa755",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-003.html": [
|
||||
"0a8a8e57ced10a97a49b3cf6574b81130451ffcf",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-004.html": [
|
||||
"f08fed6fb5ae2b82392d96be7d5ff6d3934aac06",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-005.html": [
|
||||
"9726540e7c3d1fbd72301e59484f5086d1119dab",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-children-006.html": [
|
||||
"2104e4b0b92313b5eb002a73e7f8a56f419b7927",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-tables/height-distribution/percentage-sizing-of-table-cell-children.html": [
|
||||
"10295810227dba52df0f2faa0dab5677b212364d",
|
||||
"testharness"
|
||||
|
@ -567289,6 +567400,10 @@
|
|||
"0b88adaed8fa8be943706cb043b02785d601ac8b",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/hyphens/hyphens-overflow-001.html": [
|
||||
"cddaa6b040b1b92e5280546979c2f7933234e0e0",
|
||||
"reftest"
|
||||
],
|
||||
"css/css-text/hyphens/hyphens-shaping-001.html": [
|
||||
"0cd2243bdac0e89add0223c03ba2328cb239c980",
|
||||
"reftest"
|
||||
|
@ -567309,6 +567424,10 @@
|
|||
"c1355d0abba28491a126533c24039cffc6ee4eb0",
|
||||
"support"
|
||||
],
|
||||
"css/css-text/hyphens/reference/hyphens-overflow-001-ref.html": [
|
||||
"3bbd5fe8f1464d1662b3fc132c266d84eb9c305d",
|
||||
"support"
|
||||
],
|
||||
"css/css-text/hyphens/reference/hyphens-shaping-001-ref.html": [
|
||||
"9eb1d7fd686e0f9bc1c82baf2235f8f1ef8cbb81",
|
||||
"support"
|
||||
|
@ -584582,7 +584701,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"css/css-variables/variable-presentation-attribute.html": [
|
||||
"24df5aae1719d8881801a818f168cfd3eed864f9",
|
||||
"924c8e1c053afd4ae8949d13b03a0e6921369883",
|
||||
"testharness"
|
||||
],
|
||||
"css/css-variables/variable-pseudo-element.html": [
|
||||
|
@ -593670,7 +593789,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"css/filter-effects/parsing/flood-opacity-computed.svg": [
|
||||
"0ecd8ecca5df65081b01575f3bb2431a409a6d67",
|
||||
"a395eda22e377757afc1583016e8d14da13268cc",
|
||||
"testharness"
|
||||
],
|
||||
"css/filter-effects/parsing/flood-opacity-invalid.svg": [
|
||||
|
@ -593678,7 +593797,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"css/filter-effects/parsing/flood-opacity-valid.svg": [
|
||||
"ea7ab2a8f3c0d9a7c521bde70a86ac1be8338098",
|
||||
"67eb37fad5ec15e01f9f54ea016e74606dec9f03",
|
||||
"testharness"
|
||||
],
|
||||
"css/filter-effects/parsing/lighting-color-computed.html": [
|
||||
|
@ -614029,6 +614148,10 @@
|
|||
"60163ee714686fc1c3f5f9b7011ce03cf3028e6b",
|
||||
"testharness"
|
||||
],
|
||||
"fetch/sec-metadata/history.tentative.https.sub.html": [
|
||||
"4e786925cfa2f0202d6b7bdc01669dd613556b01",
|
||||
"testharness"
|
||||
],
|
||||
"fetch/sec-metadata/iframe.tentative.https.sub.html": [
|
||||
"b916e3aa70b9b05cd899f1da0c3252ca64c12626",
|
||||
"testharness"
|
||||
|
@ -614125,12 +614248,16 @@
|
|||
"8bf8d8f22175f9eef225d954b05dac104505c4a2",
|
||||
"support"
|
||||
],
|
||||
"fetch/sec-metadata/resources/go-back.html": [
|
||||
"002c4cea4738851ea18a5a515027128ba225a0fb",
|
||||
"support"
|
||||
],
|
||||
"fetch/sec-metadata/resources/helper.js": [
|
||||
"9425246881b1bdc7f4cace59e4e211d298316197",
|
||||
"support"
|
||||
],
|
||||
"fetch/sec-metadata/resources/post-to-owner.py": [
|
||||
"81d4ebf74e3a06ef5b025557652e0ab6ea36ab3b",
|
||||
"c5ded49d71bbc4c8f6d0cc3cc1bd43f9029dcf1b",
|
||||
"support"
|
||||
],
|
||||
"fetch/sec-metadata/resources/record-header.py": [
|
||||
|
@ -624854,7 +624981,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.tentative.html": [
|
||||
"04ac273cbd77b7a1ba345a02fe73d119678d0df2",
|
||||
"ae266882b1957080b28f1204a0183c6ca015cadc",
|
||||
"testharness"
|
||||
],
|
||||
"html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-dim-ref.html": [
|
||||
|
@ -649589,13 +649716,13 @@
|
|||
"89a994af3048cc0b9fc3212fd6f1497bc717208a",
|
||||
"testharness"
|
||||
],
|
||||
"pointerevents/pointerevent_attributes_hoverable_pointers-manual.html": [
|
||||
"e74714510762aa5689b1941a973bf1568e2efafc",
|
||||
"manual"
|
||||
"pointerevents/pointerevent_attributes_hoverable_pointers.html": [
|
||||
"97e0db158ed0b2f5ccba6ea30a31c531fc9f23ef",
|
||||
"testharness"
|
||||
],
|
||||
"pointerevents/pointerevent_attributes_nohover_pointers-manual.html": [
|
||||
"0fd7904ef0041cb555d291ee60b8288bb5df7925",
|
||||
"manual"
|
||||
"pointerevents/pointerevent_attributes_nohover_pointers.html": [
|
||||
"e0073defff356a473dc96a3978c10d7dd71346d4",
|
||||
"testharness"
|
||||
],
|
||||
"pointerevents/pointerevent_boundary_events_at_implicit_release_hoverable_pointers.html": [
|
||||
"e860cd082bede68aa014fe36ceff011e8227e2ad",
|
||||
|
@ -649786,7 +649913,7 @@
|
|||
"support"
|
||||
],
|
||||
"pointerevents/pointerevent_support.js": [
|
||||
"ae9b55c43d2c884b882214924dc459ba516ff42b",
|
||||
"3b37f48889f27ca00ddc1229e6f67ba292722736",
|
||||
"support"
|
||||
],
|
||||
"pointerevents/pointerevent_suppress_compat_events_on_click.html": [
|
||||
|
@ -660502,7 +660629,7 @@
|
|||
"support"
|
||||
],
|
||||
"resources/chromium/webxr-test.js": [
|
||||
"8257fbdc2b37f10072c39dd90a3f48adcac90fa8",
|
||||
"88227cbf12326838d416470cdd9757052d66020d",
|
||||
"support"
|
||||
],
|
||||
"resources/chromium/webxr-test.js.headers": [
|
||||
|
@ -669206,7 +669333,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"svg/painting/parsing/fill-opacity-computed.svg": [
|
||||
"ac1e4e2c689fc21db7a7f250876aa1e049ddf886",
|
||||
"16843bcceecbbd1833a8c70ad35ee3a33903d4ae",
|
||||
"testharness"
|
||||
],
|
||||
"svg/painting/parsing/fill-opacity-invalid.svg": [
|
||||
|
@ -669214,7 +669341,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"svg/painting/parsing/fill-opacity-valid.svg": [
|
||||
"41cfe985d623d682788c538e87502732821ccfc8",
|
||||
"90d2732b1854785585f2edbb61de1195054c0b7a",
|
||||
"testharness"
|
||||
],
|
||||
"svg/painting/parsing/fill-rule-computed.svg": [
|
||||
|
@ -669374,7 +669501,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"svg/painting/parsing/stroke-opacity-computed.svg": [
|
||||
"5912e5e030d70488246c53aabef3a7d49f23e5c6",
|
||||
"df58a213ff50835181f1e74eb608aa5aabcbeacb",
|
||||
"testharness"
|
||||
],
|
||||
"svg/painting/parsing/stroke-opacity-invalid.svg": [
|
||||
|
@ -669382,7 +669509,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"svg/painting/parsing/stroke-opacity-valid.svg": [
|
||||
"983be91c8a8db76b1164a3c401a5ce46bc9fe96b",
|
||||
"a333363e3834ab594a3b7cb7a6839d230f327ba2",
|
||||
"testharness"
|
||||
],
|
||||
"svg/painting/parsing/stroke-valid.svg": [
|
||||
|
@ -669578,7 +669705,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"svg/pservers/parsing/stop-opacity-computed.svg": [
|
||||
"26457e82e86facffe68a156f522e602dd9b52cd4",
|
||||
"1ad1e98c5a84ebad5e0129164e0d5616b72e36fc",
|
||||
"testharness"
|
||||
],
|
||||
"svg/pservers/parsing/stop-opacity-invalid.svg": [
|
||||
|
@ -669586,7 +669713,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"svg/pservers/parsing/stop-opacity-valid.svg": [
|
||||
"73516f62c15232a2a0409e3ca75684bff3fc92d7",
|
||||
"28b60038a4d5707ae45b5e6e7dbc7f806717eaf9",
|
||||
"testharness"
|
||||
],
|
||||
"svg/pservers/pattern-with-invalid-base-cloned-crash.html": [
|
||||
|
@ -675870,7 +675997,7 @@
|
|||
"support"
|
||||
],
|
||||
"tools/wptrunner/wptrunner/font.py": [
|
||||
"51c5578a3c9ba8f07467d11663605d799c52856f",
|
||||
"6647a8580be7ab4050bbd37593b2e6595bc3ac72",
|
||||
"support"
|
||||
],
|
||||
"tools/wptrunner/wptrunner/formatters/__init__.py": [
|
||||
|
@ -679886,7 +680013,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html": [
|
||||
"bee1aa835bf64ef31e7bc61e4bc8e9e8d0c43ec3",
|
||||
"b556e31b5e0dcea8b0c82d859e53d980b4936a2e",
|
||||
"testharness"
|
||||
],
|
||||
"webaudio/the-audio-api/the-audiodestinationnode-interface/.gitkeep": [
|
||||
|
@ -680137,6 +680264,10 @@
|
|||
"4281f56379bb20f1e173c22c99ab208d2be0fdd4",
|
||||
"testharness"
|
||||
],
|
||||
"webaudio/the-audio-api/the-audioworklet-interface/processors/active-processing.js": [
|
||||
"ef497733cafb471f74ace33045c4b4d43f3ce4f2",
|
||||
"support"
|
||||
],
|
||||
"webaudio/the-audio-api/the-audioworklet-interface/processors/add-offset.js": [
|
||||
"139f5940c554057329018d4c57c8790d6ae29dc7",
|
||||
"support"
|
||||
|
@ -680266,7 +680397,7 @@
|
|||
"support"
|
||||
],
|
||||
"webaudio/the-audio-api/the-channelmergernode-interface/active-processing.https.html": [
|
||||
"24932921e9b506f265440b57bfc3be79b5322bb3",
|
||||
"6136583b90fa97542829f89c3b7a5d2611fac23f",
|
||||
"testharness"
|
||||
],
|
||||
"webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-basic.html": [
|
||||
|
@ -681322,7 +681453,7 @@
|
|||
"support"
|
||||
],
|
||||
"webdriver/tests/navigate_to/navigate.py": [
|
||||
"1ad7304008c16900bf3f935098ed30835c4f0c94",
|
||||
"36c277dab62633d013263780523cdebad1b436ab",
|
||||
"wdspec"
|
||||
],
|
||||
"webdriver/tests/navigate_to/user_prompts.py": [
|
||||
|
@ -687258,7 +687389,7 @@
|
|||
"support"
|
||||
],
|
||||
"webxr/resources/webxr_test_constants.js": [
|
||||
"aed6ff9c80905e96a100bbe48c7a9f37ea4237e9",
|
||||
"fd6d0fb184237e0092f499950e2562dddda695d7",
|
||||
"support"
|
||||
],
|
||||
"webxr/resources/webxr_util.js": [
|
||||
|
@ -687286,7 +687417,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"webxr/xrBoundedReferenceSpace_updates.https.html": [
|
||||
"cf1047c8abc96740f22088620723e50a7da1db13",
|
||||
"e2920b176567774984e115b2998e89edf95362e6",
|
||||
"testharness"
|
||||
],
|
||||
"webxr/xrDevice_disconnect_ends.https.html": [
|
||||
|
@ -687390,7 +687521,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"webxr/xrStationaryReferenceSpace_floorlevel_updates.https.html": [
|
||||
"68f91fd315019ccee9fbb9e034166338c65acad9",
|
||||
"06a256698165e5bc592256a4ce24ddce12de74f8",
|
||||
"testharness"
|
||||
],
|
||||
"webxr/xrView_eyes.https.html": [
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
[opacity-computed.html]
|
||||
[Property opacity value '-100%' computes to '0']
|
||||
expected: FAIL
|
||||
|
||||
[Property opacity value '50%' computes to '0.5']
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[opacity-valid.html]
|
||||
[e.style['opacity'\] = "300%" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['opacity'\] = "50%" should set the property value]
|
||||
expected: FAIL
|
||||
|
||||
[e.style['opacity'\] = "-100%" should set the property value]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[hyphens-overflow-001.html]
|
||||
expected: FAIL
|
|
@ -56,9 +56,3 @@
|
|||
[background-position length(px) / events]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(em) / values]
|
||||
expected: FAIL
|
||||
|
||||
[font-size length(em) / events]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -509,3 +509,6 @@
|
|||
[border-left-width length(pt) / values]
|
||||
expected: FAIL
|
||||
|
||||
[padding-bottom length(mm) / values]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
[matchMedia-display-none-iframe.html]
|
||||
expected: ERROR
|
|
@ -318,9 +318,15 @@
|
|||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
|
||||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -59,6 +59,3 @@
|
|||
[separate text/javascript;charset=windows-1252 error text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
[separate text/javascript;charset=windows-1252 text/javascript]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,6 +11,6 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%0C]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20'NosniFF']
|
||||
[Content-Type-Options%3A%20nosniff]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
[history.tentative.https.sub.html]
|
||||
[back to same-origin-initiated navigation]
|
||||
expected: FAIL
|
||||
|
||||
[back to same-site-initiated navigation]
|
||||
expected: FAIL
|
||||
|
||||
[back to cross-site-initiated navigation]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,24 @@
|
|||
[open-features-negative-innerwidth-innerheight.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
|
||||
expected: FAIL
|
||||
|
||||
[features "innerheight=-404.5" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=-404.5" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=-404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=-404e1" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=-404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=-404e1" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,24 @@
|
|||
[open-features-negative-screenx-screeny.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
|
||||
expected: FAIL
|
||||
|
||||
[features "screenx=-204" should NOT set "left=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=-204" should NOT set "top=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=-204.5" should NOT set "top=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=-0" should NOT set "top=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=-0" should NOT set "left=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=-204.5" should NOT set "left=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,24 @@
|
|||
[open-features-negative-top-left.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: negative values for `top`, `left`]
|
||||
expected: FAIL
|
||||
|
||||
[features "top=-204" should NOT set "top=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=-204.5" should NOT set "top=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=-204" should NOT set "left=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=-0" should NOT set "top=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=-204.5" should NOT set "left=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=-0" should NOT set "left=204"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,24 @@
|
|||
[open-features-negative-width-height.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: negative values for `width`, `height`]
|
||||
expected: FAIL
|
||||
|
||||
[features "height=-404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=-404e1" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=-404.5" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=-404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=-404e1" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=-404.5" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,48 @@
|
|||
[open-features-non-integer-height.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for feature `height`]
|
||||
expected: FAIL
|
||||
|
||||
[features "height=405*3" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405.32" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405e1" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405/5" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405^4" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405.5" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405e-1" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405 " should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=405LLl" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=/404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[top=0,left=0,width=401,: absence of feature "height" should be treated same as "height=0"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[top=0,left=0: absence of feature "height" should be treated same as "height=0"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=_404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "height=L404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,42 @@
|
|||
[open-features-non-integer-innerheight.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
|
||||
expected: FAIL
|
||||
|
||||
[features "innerheight=405e-1" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405LLl" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405^4" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405e1" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405 " should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405/5" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405.32" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405.5" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=405*3" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=_404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=L404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerheight=/404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,42 @@
|
|||
[open-features-non-integer-innerwidth.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
|
||||
expected: FAIL
|
||||
|
||||
[features "innerwidth=405e-1" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405*3" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405.5" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405e1" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405.32" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405 " should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405LLl" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405/5" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=405^4" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=/404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=_404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "innerwidth=L404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,42 @@
|
|||
[open-features-non-integer-left.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for feature `left`]
|
||||
expected: FAIL
|
||||
|
||||
[features "left=105e1" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105 " should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105/5" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105e-1" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105^4" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105LLl" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105.32" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105*3" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=105.5" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=L104" should NOT set "left=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=/104" should NOT set "left=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "left=_104" should NOT set "left=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,42 @@
|
|||
[open-features-non-integer-screenx.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for legacy feature `screenx`]
|
||||
expected: FAIL
|
||||
|
||||
[features "screenx=105.5" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105e1" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105 " should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105*3" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105e-1" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105^4" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105LLl" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105/5" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=105.32" should set "left=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=_104" should NOT set "left=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=L104" should NOT set "left=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screenx=/104" should NOT set "left=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,42 @@
|
|||
[open-features-non-integer-screeny.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for legacy feature `screeny`]
|
||||
expected: FAIL
|
||||
|
||||
[features "screeny=405^4" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405e-1" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405LLl" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405e1" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405 " should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405/5" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405*3" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405.32" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=405.5" should set "height=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=_404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=L404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "screeny=/404" should NOT set "height=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,42 @@
|
|||
[open-features-non-integer-top.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for feature `top`]
|
||||
expected: FAIL
|
||||
|
||||
[features "top=105/5" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105*3" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105LLl" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105e-1" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105.32" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105e1" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105 " should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105^4" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=105.5" should set "top=105"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=/104" should NOT set "top=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=_104" should NOT set "top=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "top=L104" should NOT set "top=104"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,32 +1,48 @@
|
|||
[open-features-non-integer-width.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[HTML: window.open `features`: non-integer values for feature `width`]
|
||||
expected: FAIL
|
||||
|
||||
[features "width=405^4" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405.5" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405e1" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405 " should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405.32" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405LLl" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405*3" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405e-1" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=405/5" should set "width=405"]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[top=0,left=0: absence of feature "width" should be treated same as "width=0"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=_404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[top=0,left=0,height=401,: absence of feature "width" should be treated same as "width=0"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=/404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
[features "width=L404" should NOT set "width=404"]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
[promise-rejection-events-onerror.html]
|
||||
expected: TIMEOUT
|
||||
[Throwing inside an unhandledrejection handler invokes the error handler.]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
[promise-rejection-events.html]
|
||||
expected: TIMEOUT
|
||||
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -9,6 +8,3 @@
|
|||
[no unhandledrejection/rejectionhandled: rejection handler attached synchronously to a promise created from createImageBitmap]
|
||||
expected: FAIL
|
||||
|
||||
[rejectionhandled is dispatched from a queued task, and not immediately]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -92,3 +92,6 @@
|
|||
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t9.4836157560348511e-1\t9.5236867666244507e-1\t4.0071010589599609e-3\t4.2075103446311962e-3\t3.8985999999999999e-3\n\t[31\]\t9.2646563053131104e-1\t9.3139332532882690e-1\t4.9276947975158691e-3\t5.2906700783754857e-3\t3.8985999999999999e-3\n\t[32\]\t9.0087991952896118e-1\t9.0675884485244751e-1\t5.8789253234863281e-3\t6.4834496590358351e-3\t3.8985999999999999e-3\n\t[33\]\t8.7170630693435669e-1\t8.7856203317642212e-1\t6.8557262420654297e-3\t7.8033490899654511e-3\t3.8985999999999999e-3\n\t[34\]\t8.3906102180480957e-1\t8.4691369533538818e-1\t7.8526735305786133e-3\t9.2721059699818163e-3\t3.8985999999999999e-3\n\t...and 31037 more errors.\n\tMax AbsError of 9.8276454210281372e-1 at index of 39267.\n\t[39267\]\t-7.7627718382884549e-35\t-9.8276454210281372e-1\t9.8276454210281372e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\tMax RelError of 3.3137802965303198e+0 at index of 1253.\n\t[1253\]\t-4.3022233992815018e-2\t-9.9732093513011932e-3\t3.3049024641513824e-2\t3.3137802965303198e+0\t3.8985999999999999e-3\n]
|
||||
expected: FAIL
|
||||
|
||||
[X Stitched sine-wave buffers at sample rate 43800 does not equal [0,0.06264832615852356,0.12505052983760834,0.18696144223213196,0.24813786149024963,0.308339387178421,0.36732959747314453,0.4248766601085663,0.480754554271698,0.5347436666488647,0.5866320133209229,0.6362156271934509,0.6832997798919678,0.7276994585990906,0.7692402601242065,0.8077589869499207...\] with an element-wise tolerance of {"absoluteThreshold":0.0038986,"relativeThreshold":0}.\n\tIndex\tActual\t\t\tExpected\t\tAbsError\t\tRelError\t\tTest threshold\n\t[30\]\t9.4836157560348511e-1\t9.5236867666244507e-1\t4.0071010589599609e-3\t4.2075103446311962e-3\t3.8985999999999999e-3\n\t[31\]\t9.2646563053131104e-1\t9.3139332532882690e-1\t4.9276947975158691e-3\t5.2906700783754857e-3\t3.8985999999999999e-3\n\t[32\]\t9.0087991952896118e-1\t9.0675884485244751e-1\t5.8789253234863281e-3\t6.4834496590358351e-3\t3.8985999999999999e-3\n\t[33\]\t8.7170630693435669e-1\t8.7856203317642212e-1\t6.8557262420654297e-3\t7.8033490899654511e-3\t3.8985999999999999e-3\n\t[34\]\t8.3906102180480957e-1\t8.4691369533538818e-1\t7.8526735305786133e-3\t9.2721059699818163e-3\t3.8985999999999999e-3\n\t...and 31037 more errors.\n\tMax AbsError of 9.8276454210281372e-1 at index of 39267.\n\t[39267\]\t1.0937919833103690e-34\t-9.8276454210281372e-1\t9.8276454210281372e-1\t1.0000000000000000e+0\t3.8985999999999999e-3\n\tMax RelError of 3.3137802965303198e+0 at index of 1253.\n\t[1253\]\t-4.3022233992815018e-2\t-9.9732093513011932e-3\t3.3049024641513824e-2\t3.3137802965303198e+0\t3.8985999999999999e-3\n]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,3 +2,6 @@
|
|||
[test_invalid_always_match[None\]]
|
||||
expected: FAIL
|
||||
|
||||
[test_invalid_capabilites[value3\]]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[WorkerGlobalScope-close.html]
|
||||
[Test sending a message after closing.]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
[import-in-moduleworker.html]
|
||||
expected: ERROR
|
||||
[Base URL in module dedicated workers: import]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[Worker-constructor.html]
|
||||
expected: ERROR
|
|
@ -1,2 +0,0 @@
|
|||
[hide_and_show.html]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[transition_calc_implicit.html]
|
||||
expected: TIMEOUT
|
|
@ -1,2 +0,0 @@
|
|||
[resize_after_load.html]
|
||||
expected: FAIL
|
|
@ -27,6 +27,7 @@ test_computed_value("color", "#FEDCBA", "rgb(254, 220, 186)");
|
|||
test_computed_value("color", "rgb(2, 3, 4)");
|
||||
test_computed_value("color", "rgb(100%, 0%, 0%)", "rgb(255, 0, 0)");
|
||||
test_computed_value("color", "rgba(2, 3, 4, 0.5)");
|
||||
test_computed_value("color", "rgba(2, 3, 4, 50%)", "rgba(2, 3, 4, 0.5)");
|
||||
test_computed_value("color", "hsl(120, 100%, 50%)", "rgb(0, 255, 0)");
|
||||
test_computed_value("color", "hsla(120, 100%, 50%, 0.25)", "rgba(0, 255, 0, 0.25)");
|
||||
test_computed_value("color", "rgb(-2, 3, 4)", "rgb(0, 3, 4)");
|
||||
|
|
|
@ -21,6 +21,7 @@ test_valid_value("color", "#FEDCBA", "rgb(254, 220, 186)");
|
|||
test_valid_value("color", "rgb(2, 3, 4)");
|
||||
test_valid_value("color", "rgb(100%, 0%, 0%)", "rgb(255, 0, 0)");
|
||||
test_valid_value("color", "rgba(2, 3, 4, 0.5)"); // Safari serializes alpha-value 0.498039
|
||||
test_valid_value("color", "rgba(2, 3, 4, 50%)", "rgba(2, 3, 4, 0.5)"); // Safari serializes alpha-value 0.498039
|
||||
test_valid_value("color", "hsl(120, 100%, 50%)", ["rgb(0, 255, 0)", "hsl(120, 100%, 50%)"]);
|
||||
test_valid_value("color", "hsla(120, 100%, 50%, 0.25)", ["rgba(0, 255, 0, 0.25)", "hsla(120, 100%, 50%, 0.25)"]); // Safari serializes alpha-value 0.247059
|
||||
test_valid_value("color", "rgb(-2, 3, 4)", "rgb(0, 3, 4)");
|
||||
|
|
|
@ -16,6 +16,10 @@ test_computed_value("opacity", "0.5");
|
|||
test_computed_value("opacity", "0");
|
||||
test_computed_value("opacity", "-2", "0");
|
||||
test_computed_value("opacity", "3", "1");
|
||||
test_computed_value("opacity", "-100%", "0");
|
||||
test_computed_value("opacity", "50%", "0.5");
|
||||
test_computed_value("opacity", "300%", "1");
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -17,6 +17,10 @@ test_valid_value("opacity", "0.5");
|
|||
test_valid_value("opacity", "0");
|
||||
test_valid_value("opacity", "-2");
|
||||
test_valid_value("opacity", "3");
|
||||
test_valid_value("opacity", "-100%", "-1");
|
||||
test_valid_value("opacity", "50%", "0.5");
|
||||
test_valid_value("opacity", "300%", "3");
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
<!DOCTYPE html>
|
||||
<html class='reftest-wait'>
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-position-3/" />
|
||||
<meta name="assert" content="This test checks that a dynamic change in constraints calculates the static position correctly."/>
|
||||
<script src="/common/reftest-wait.js"></script>
|
||||
<style>
|
||||
#container {
|
||||
position: relative;
|
||||
background: red;
|
||||
direction: rtl;
|
||||
|
||||
box-sizing: border-box;
|
||||
border: solid green 10px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
#float {
|
||||
float: right;
|
||||
background: green;
|
||||
|
||||
width: 40px;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
#target {
|
||||
position: absolute;
|
||||
background: green;
|
||||
display: inline;
|
||||
|
||||
width: 40px;
|
||||
height: 80px;
|
||||
top: -10px;
|
||||
left: -10px;
|
||||
}
|
||||
</style>
|
||||
<p>Test passes if there is a filled green square.</p>
|
||||
<div id="container">
|
||||
<div id="float"></div>
|
||||
<div id="target"></div>
|
||||
</div>
|
||||
<script>
|
||||
document.body.offsetTop;
|
||||
const target = document.getElementById('target');
|
||||
target.style.top = 'initial';
|
||||
target.style.left = 'initial';
|
||||
document.body.offsetTop;
|
||||
takeScreenshot();
|
||||
</script>
|
|
@ -0,0 +1,38 @@
|
|||
<!doctype html>
|
||||
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-tables-3/#row-layout">
|
||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||
<link rel="bookmark" href="https://crbug.com/982312" />
|
||||
<meta name="flags" content="" />
|
||||
<meta name="assert" content="min-height is honored on a %height child of a table cell with an unresolvable %height and when the descendant has overflow:auto" />
|
||||
|
||||
<title>table cell percent height descendant with overflow:auto</title>
|
||||
|
||||
<!-- msft.html -->
|
||||
|
||||
<style>
|
||||
.list-div {
|
||||
overflow-y: auto;
|
||||
height: 100%;
|
||||
width: 100px;
|
||||
min-height: 100px;
|
||||
background: green;
|
||||
}
|
||||
#redSquare {
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
background-color: red;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.
|
||||
</p>
|
||||
<div id="redSquare"></div>
|
||||
<div style="display:table">
|
||||
<div style="display:table-cell; height:100%">
|
||||
<div class="list-div">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,38 @@
|
|||
<!doctype html>
|
||||
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-tables-3/#row-layout">
|
||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||
<link rel="bookmark" href="https://crbug.com/982312" />
|
||||
<meta name="flags" content="" />
|
||||
<meta name="assert" content="%height child of a table cell with a fixed height is positioned correctly when the min-height is greater than the cell's fixed height and when the descendant has overflow:auto." />
|
||||
|
||||
<title>table cell percent height descendant with overflow:auto</title>
|
||||
|
||||
<!-- msft_fixed_height.html -->
|
||||
|
||||
<style>
|
||||
.list-div {
|
||||
overflow-y: auto;
|
||||
height: 100%;
|
||||
width: 100px;
|
||||
min-height: 100px;
|
||||
background: green;
|
||||
}
|
||||
#redSquare {
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
background-color: red;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.
|
||||
</p>
|
||||
<div id="redSquare"></div>
|
||||
<div style="display:table">
|
||||
<div style="display:table-cell; height:50px">
|
||||
<div class="list-div">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,41 @@
|
|||
<!doctype html>
|
||||
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-tables-3/#row-layout">
|
||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||
<link rel="bookmark" href="https://crbug.com/982312" />
|
||||
<meta name="flags" content="" />
|
||||
<meta name="assert" content="intrinsic height of a table cell descendant is honored when the descendant and cell both have unresolvable percentage heights and when the descendant has overflow:auto" />
|
||||
|
||||
<title>table cell percent height descendant with overflow:auto</title>
|
||||
|
||||
<!-- other_msft.html -->
|
||||
|
||||
<style>
|
||||
.list-div {
|
||||
overflow-y: auto;
|
||||
height: 100%;
|
||||
}
|
||||
.list-div-child {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background: green;
|
||||
}
|
||||
#redSquare {
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
background-color: red;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.
|
||||
</p>
|
||||
<div id="redSquare"></div>
|
||||
<div style="display:table">
|
||||
<div style="display:table-cell; height:100%">
|
||||
<div class="list-div">
|
||||
<div class="list-div-child"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,39 @@
|
|||
<!doctype html>
|
||||
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-tables-3/#row-layout">
|
||||
<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
|
||||
<link rel="bookmark" href="https://crbug.com/982312" />
|
||||
<meta name="flags" content="" />
|
||||
<meta name="assert" content="table cell descendant retains its min-height when the descendant and cell both have unresolvable percentage heights and the descendant has overflow:auto, and the cell's sibling has a fixed height greater than the descendant's min-height." />
|
||||
|
||||
<title>table cell percent height descendant with overflow:auto</title>
|
||||
|
||||
<!-- msftsibling.html -->
|
||||
|
||||
<style>
|
||||
.list-div {
|
||||
overflow-y: auto;
|
||||
height: 100%;
|
||||
width: 100px;
|
||||
min-height: 100px;
|
||||
background: green;
|
||||
}
|
||||
#redSquare {
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
background-color: red;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.
|
||||
</p>
|
||||
<div id="redSquare"></div>
|
||||
<div style="display:table">
|
||||
<!-- vertical-align:top because blink and ff do baseline differently here -->
|
||||
<div style="display:table-cell; height:100%; vertical-align:top;">
|
||||
<div class="list-div"></div>
|
||||
</div>
|
||||
<div style="display:table-cell; height:150px;"></div>
|
||||
</div>
|
|
@ -0,0 +1,20 @@
|
|||
<!DOCTYPE html>
|
||||
<title>CSS Text Test: Test when soft-hyphen overflows</title>
|
||||
<link rel="match" href="reference/hyphens-overflow-001-ref.html">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#hyphens-property">
|
||||
<link rel="author" href="mailto:kojii@chromium.org">
|
||||
<style>
|
||||
div {
|
||||
font-size: 10px;
|
||||
font-family: Ahem;
|
||||
width: 5.1ch;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div>12 4­xx</div>
|
||||
<div>12 45­xx</div>
|
||||
<div>12 456­xx</div>
|
||||
<div>1234­xx</div>
|
||||
<div>12345­xx</div>
|
||||
<div>123456­xx</div>
|
||||
</body>
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<style>
|
||||
div {
|
||||
font-size: 10px;
|
||||
font-family: Ahem;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div>12 4-<br>xx</div>
|
||||
<div>12<br>45xx</div>
|
||||
<div>12<br>456xx</div>
|
||||
<div>1234-<br>xx</div>
|
||||
<div>12345-<br>xx</div>
|
||||
<div>123456-<br>xx</div>
|
||||
</body>
|
|
@ -59,7 +59,7 @@
|
|||
{ property: "cursor", valuesToTest:["auto", "crosshair", "default", "pointer", "move", "e-resize", "ne-resize", "nw-resize", "n-resize", "se-resize", "sw-resize", "s-resize", "w-resize", "text", "wait", "help"], default: "auto" },
|
||||
{ property: "direction", valuesToTest:["ltr", "rtl"], default: "ltr" },
|
||||
{ property: "display", valuesToTest:["inline", "block", "list-item", "table", "inline-table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group", "table-column", "table-cell", "table-caption", "none"], default: "inline" },
|
||||
{ property: "dominant-baseline", valuesToTest:["auto", "use-script", "no-change", "reset-size", "ideographic", "alphabetic", "hanging", "mathematical", "central", "middle", "text-after-edge", "text-before-edge"], default: "auto" },
|
||||
{ property: "dominant-baseline", valuesToTest:["auto", "ideographic", "alphabetic", "hanging", "mathematical", "central", "middle", "text-after-edge", "text-before-edge"], default: "auto" },
|
||||
{ property: "fill", valuesToTest:["red", "url(#gradient) black"], default: "black" },
|
||||
{ property: "fill-opacity", valuesToTest:["0.8"], default: "1" },
|
||||
{ property: "fill-rule", valuesToTest:["nonzero", "evenodd"], default: "nonzero" },
|
||||
|
|
|
@ -16,6 +16,9 @@
|
|||
test_computed_value("flood-opacity", "-1", "0");
|
||||
test_computed_value("flood-opacity", "0.5");
|
||||
test_computed_value("flood-opacity", "3", "1");
|
||||
test_computed_value("flood-opacity", "-100%", "0");
|
||||
test_computed_value("flood-opacity", "50%", "0.5");
|
||||
test_computed_value("flood-opacity", "300%", "1");
|
||||
|
||||
]]></script>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 819 B After Width: | Height: | Size: 974 B |
|
@ -16,9 +16,9 @@
|
|||
test_valid_value("flood-opacity", "-1");
|
||||
test_valid_value("flood-opacity", "0.5");
|
||||
test_valid_value("flood-opacity", "3");
|
||||
test_valid_value("flood-opacity", "-100%");
|
||||
test_valid_value("flood-opacity", "50%");
|
||||
test_valid_value("flood-opacity", "300%");
|
||||
test_valid_value("flood-opacity", "-100%", "-1");
|
||||
test_valid_value("flood-opacity", "50%", "0.5");
|
||||
test_valid_value("flood-opacity", "300%", "3");
|
||||
|
||||
]]></script>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 931 B After Width: | Height: | Size: 949 B |
|
@ -0,0 +1,81 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<script src=/resources/testharness.js></script>
|
||||
<script src=/resources/testharnessreport.js></script>
|
||||
<script src=/fetch/sec-metadata/resources/helper.js></script>
|
||||
<script>
|
||||
|
||||
// Test that correct `Sec-Fetch-Site` (and other `Sec-Fetch-...` request
|
||||
/// headers) are used in navigations triggered by |history.back()|.
|
||||
function add_test(description, report_host, go_back_host, expectations) {
|
||||
async_test(t => {
|
||||
// STEP1: Navigate a new window to report_host/post-to-owner.py
|
||||
const url_suffix = '/fetch/sec-metadata/resources/post-to-owner.py'
|
||||
const url = `https://${report_host}${url_suffix}`;
|
||||
const w = window.open(url, '_blank');
|
||||
|
||||
var msg_counter = 0;
|
||||
window.addEventListener('message', t.step_func(e => {
|
||||
if (e.source != w)
|
||||
return;
|
||||
msg_counter = msg_counter + 1;
|
||||
if (msg_counter == 1) {
|
||||
// STEP2: Verify the headers (this is a sanity check that the same
|
||||
// headers are used here and in STEP5).
|
||||
assert_header_equals(e.data, expectations);
|
||||
|
||||
// STEP3: Go to go_back_host/go-back.html (postponing this via
|
||||
// step_timeout ensures that go-back.html will get a separate
|
||||
// history entry - otherwise it might be treated as a client-side
|
||||
// redirect and we might end up with nowhere to go back to).
|
||||
t.step_timeout(() => {
|
||||
const url_suffix = '/fetch/sec-metadata/resources/go-back.html'
|
||||
const url = `https://${go_back_host}${url_suffix}`;
|
||||
w.location = url;
|
||||
});
|
||||
|
||||
// STEP4 (elsewhere - inside go-back.html): Call history.back().
|
||||
} else if (msg_counter == 2) {
|
||||
// STEP5: Verify the headers (this is the main verification and focus
|
||||
// of the test).
|
||||
assert_header_equals(e.data, expectations);
|
||||
|
||||
// STEP6: Finish the test.
|
||||
t.done();
|
||||
}
|
||||
}));
|
||||
}, description);
|
||||
}
|
||||
|
||||
const same_origin_host = "{{host}}:{{ports[https][0]}}";
|
||||
const same_site_host = "{{hosts[][www]}}:{{ports[https][0]}}";
|
||||
const cross_site_host = "{{hosts[alt][www]}}:{{ports[https][0]}}";
|
||||
|
||||
add_test(
|
||||
"back to same-origin-initiated navigation",
|
||||
same_origin_host, // report_host
|
||||
cross_site_host, // go_back_host
|
||||
{ "dest": "document",
|
||||
"site": "same-origin",
|
||||
"user": "",
|
||||
"mode": "navigate" });
|
||||
|
||||
add_test(
|
||||
"back to same-site-initiated navigation",
|
||||
same_site_host, // report_host
|
||||
cross_site_host, // go_back_host
|
||||
{ "dest": "document",
|
||||
"site": "same-site",
|
||||
"user": "",
|
||||
"mode": "navigate" });
|
||||
|
||||
add_test(
|
||||
"back to cross-site-initiated navigation",
|
||||
cross_site_host, // report_host
|
||||
cross_site_host, // go_back_host
|
||||
{ "dest": "document",
|
||||
"site": "cross-site",
|
||||
"user": "",
|
||||
"mode": "navigate" });
|
||||
|
||||
</script>
|
|
@ -0,0 +1,3 @@
|
|||
<!DOCTYPE html>
|
||||
<body onload="history.back()">
|
||||
</body>
|
|
@ -1,7 +1,10 @@
|
|||
import json
|
||||
|
||||
def main(request, response):
|
||||
headers = [("Content-Type", "text/html")]
|
||||
headers = [
|
||||
("Content-Type", "text/html"),
|
||||
("Cache-Control", "no-cache, no-store, must-revalidate")
|
||||
]
|
||||
|
||||
body = """
|
||||
<!DOCTYPE html>
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
}
|
||||
</style>
|
||||
<img src=broken width=100 height=125>
|
||||
<img src="/images/green.png" width=100 height=125>
|
||||
<img src="/images/green.png">
|
||||
<img src="/images/green.png" width=100 height=125>
|
||||
<script>
|
||||
let t = async_test("Image width and height attributes are used to infer aspect-ratio");
|
||||
function assert_ratio(img, expected) {
|
||||
|
@ -21,7 +21,7 @@ function assert_ratio(img, expected) {
|
|||
onload = t.step_func_done(function() {
|
||||
let images = document.querySelectorAll("img");
|
||||
assert_ratio(images[0], 0.8);
|
||||
assert_ratio(images[1], 0.8);
|
||||
assert_ratio(images[2], 2.0); // 2.0 is the original aspect ratio of green.png
|
||||
assert_ratio(images[1], 2.0); // Loaded image's aspect ratio, at least by default, overrides width / height ratio.
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testdriver.js"></script>
|
||||
<script src="/resources/testdriver-actions.js"></script>
|
||||
<script src="/resources/testdriver-vendor.js"></script>
|
||||
<!-- Additional helper script for common checks across event types -->
|
||||
<script type="text/javascript" src="pointerevent_support.js"></script>
|
||||
<script>
|
||||
|
@ -95,6 +98,7 @@
|
|||
var innerFrame = document.getElementById('innerFrame');
|
||||
var square2 = innerFrame.contentDocument.getElementById('square2');
|
||||
var rectSquare2 = square2.getBoundingClientRect();
|
||||
var actions_promise;
|
||||
|
||||
eventList.forEach(function(eventName) {
|
||||
on_event(square1, eventName, function (event) {
|
||||
|
@ -112,10 +116,32 @@
|
|||
checkPointerEventAttributes(event, rectSquare2, "Inner frame ");
|
||||
if (Object.keys(detected_eventTypes).length == eventList.length) {
|
||||
square2.style.visibility = 'hidden';
|
||||
// Make sure the test finishes after all the input actions are completed.
|
||||
actions_promise.then( () => {
|
||||
test_pointerEvent.done();
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Inject mouse and pen inputs.
|
||||
actions_promise = clickInTarget("mouse", square1).then(function() {
|
||||
return moveToDocument("mouse");
|
||||
}).then(function() {
|
||||
return clickInTarget("mouse", square2);
|
||||
}).then(function() {
|
||||
return moveToDocument("mouse");
|
||||
}).then(function() {
|
||||
test_pointerEvent.done();
|
||||
}).then(function() {
|
||||
return clickInTarget("pen", square1);
|
||||
}).then(function() {
|
||||
return moveToDocument("pen");
|
||||
}).then(function() {
|
||||
return clickInTarget("pen", square2);
|
||||
}).then(function() {
|
||||
return moveToDocument("pen");
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</head>
|
|
@ -6,6 +6,9 @@
|
|||
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/testdriver.js"></script>
|
||||
<script src="/resources/testdriver-actions.js"></script>
|
||||
<script src="/resources/testdriver-vendor.js"></script>
|
||||
<!-- Additional helper script for common checks across event types -->
|
||||
<script type="text/javascript" src="pointerevent_support.js"></script>
|
||||
<script>
|
||||
|
@ -76,6 +79,7 @@
|
|||
var innerFrame = document.getElementById('innerFrame');
|
||||
var square2 = innerFrame.contentDocument.getElementById('square2');
|
||||
var rectSquare2 = square2.getBoundingClientRect();
|
||||
var actions_promise;
|
||||
|
||||
eventList.forEach(function(eventName) {
|
||||
on_event(square1, eventName, function (event) {
|
||||
|
@ -93,10 +97,18 @@
|
|||
checkPointerEventAttributes(event, rectSquare2, "Inner frame ");
|
||||
if (Object.keys(detected_eventTypes).length == eventList.length) {
|
||||
square2.style.visibility = 'hidden';
|
||||
// Make sure the test finishes after all the input actions are completed.
|
||||
actions_promise.then( () => {
|
||||
test_pointerEvent.done();
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Inject touch inputs.
|
||||
actions_promise = clickInTarget("touch", square1).then(function() {
|
||||
return clickInTarget("touch", square2);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</head>
|
|
@ -353,3 +353,11 @@ function pointerHoverInTarget(pointerType, target, direction) {
|
|||
.pointerMove(3 * x_delta, 3 * y_delta, {origin: target})
|
||||
.send();
|
||||
}
|
||||
|
||||
function moveToDocument(pointerType) {
|
||||
var pointerId = pointerType + "Pointer1";
|
||||
return new test_driver.Actions()
|
||||
.addPointer(pointerId, pointerType)
|
||||
.pointerMove(0, 0)
|
||||
.send();
|
||||
}
|
||||
|
|
|
@ -16,6 +16,35 @@ const default_stage_parameters = {
|
|||
bounds: null
|
||||
};
|
||||
|
||||
function getMatrixFromTransform(transform) {
|
||||
let x = transform.orientation[0];
|
||||
let y = transform.orientation[1];
|
||||
let z = transform.orientation[2];
|
||||
let w = transform.orientation[3];
|
||||
|
||||
let m11 = 1.0 - 2.0 * (y * y + z * z);
|
||||
let m21 = 2.0 * (x * y + z * w);
|
||||
let m31 = 2.0 * (x * z - y * w);
|
||||
|
||||
let m12 = 2.0 * (x * y - z * w);
|
||||
let m22 = 1.0 - 2.0 * (x * x + z * z);
|
||||
let m32 = 2.0 * (y * z + x * w);
|
||||
|
||||
let m13 = 2.0 * (x * z + y * w);
|
||||
let m23 = 2.0 * (y * z - x * w);
|
||||
let m33 = 1.0 - 2.0 * (x * x + y * y);
|
||||
|
||||
let m14 = transform.position[0];
|
||||
let m24 = transform.position[1];
|
||||
let m34 = transform.position[2];
|
||||
|
||||
// Column-major linearized order is expected.
|
||||
return [m11, m21, m31, 0,
|
||||
m12, m22, m32, 0,
|
||||
m13, m23, m33, 0,
|
||||
m14, m24, m34, 1];
|
||||
}
|
||||
|
||||
class ChromeXRTest {
|
||||
constructor() {
|
||||
this.mockVRService_ = new MockVRService(mojo.frameInterfaces);
|
||||
|
@ -178,6 +207,9 @@ class MockRuntime {
|
|||
|
||||
this.framesOfReference = {};
|
||||
|
||||
this.input_sources_ = [];
|
||||
this.next_input_source_index_ = 1;
|
||||
|
||||
// Initialize DisplayInfo first to set the defaults, then override with
|
||||
// anything from the deviceInit
|
||||
if (fakeDeviceInit.supportsImmersive) {
|
||||
|
@ -194,8 +226,8 @@ class MockRuntime {
|
|||
this.setViewerOrigin(fakeDeviceInit.viewerOrigin);
|
||||
}
|
||||
|
||||
if (fakeDeviceInit.localToFloorLevelTransform != null) {
|
||||
this.setLocalToFloorLevelTransform(fakeDeviceInit.localToFloorLevelTransform);
|
||||
if (fakeDeviceInit.floorOrigin != null) {
|
||||
this.setFloorOrigin(fakeDeviceInit.floorOrigin);
|
||||
}
|
||||
|
||||
// This appropriately handles if the coordinates are null
|
||||
|
@ -280,7 +312,7 @@ class MockRuntime {
|
|||
}
|
||||
}
|
||||
|
||||
setLocalToFloorLevelTransform(transform) {
|
||||
setFloorOrigin(floorOrigin) {
|
||||
if (!this.displayInfo_.stageParameters) {
|
||||
this.displayInfo_.stageParameters = default_stage_parameters;
|
||||
this.displayInfo_.stageParameters.bounds = this.bounds_;
|
||||
|
@ -288,14 +320,14 @@ class MockRuntime {
|
|||
|
||||
this.displayInfo_.stageParameters.standingTransform = new gfx.mojom.Transform();
|
||||
this.displayInfo_.stageParameters.standingTransform.matrix =
|
||||
this.getMatrixFromTransform(transform);
|
||||
getMatrixFromTransform(floorOrigin);
|
||||
|
||||
if (this.sessionClient_.ptr.isBound()) {
|
||||
this.sessionClient_.onChanged(this.displayInfo_);
|
||||
}
|
||||
}
|
||||
|
||||
clearLocalToFloorLevelTransform() {
|
||||
clearFloorOrigin() {
|
||||
if (this.displayInfo_.stageParameters) {
|
||||
this.displayInfo_.stageParameters = null;
|
||||
|
||||
|
@ -309,35 +341,16 @@ class MockRuntime {
|
|||
this.send_pose_reset_ = true;
|
||||
}
|
||||
|
||||
// Helper methods
|
||||
getMatrixFromTransform(transform) {
|
||||
let x = transform.orientation[0];
|
||||
let y = transform.orientation[1];
|
||||
let z = transform.orientation[2];
|
||||
let w = transform.orientation[3];
|
||||
simulateInputSourceConnection(fakeInputSourceInit) {
|
||||
let index = this.next_input_source_index_;
|
||||
this.next_input_source_index_++;
|
||||
|
||||
let m11 = 1.0 - 2.0 * (y * y + z * z);
|
||||
let m21 = 2.0 * (x * y + z * w);
|
||||
let m31 = 2.0 * (x * z - y * w);
|
||||
|
||||
let m12 = 2.0 * (x * y - z * w);
|
||||
let m22 = 1.0 - 2.0 * (x * x + z * z);
|
||||
let m32 = 2.0 * (y * z + x * w);
|
||||
|
||||
let m13 = 2.0 * (x * z + y * w);
|
||||
let m23 = 2.0 * (y * z - x * w);
|
||||
let m33 = 1.0 - 2.0 * (x * x + y * y);
|
||||
|
||||
let m14 = transform.position[0];
|
||||
let m24 = transform.position[1];
|
||||
let m34 = transform.position[2];
|
||||
|
||||
// Column-major linearized order is expected.
|
||||
return [m11, m21, m31, 0,
|
||||
m12, m22, m32, 0,
|
||||
m13, m23, m33, 0,
|
||||
m14, m24, m34, 1];
|
||||
let source = new MockXRInputSource(fakeInputSourceInit, index, this);
|
||||
this.input_sources_.push(source);
|
||||
return source;
|
||||
}
|
||||
|
||||
// Helper methods
|
||||
getNonImmersiveDisplayInfo() {
|
||||
let displayInfo = this.getImmersiveDisplayInfo();
|
||||
|
||||
|
@ -418,6 +431,21 @@ class MockRuntime {
|
|||
};
|
||||
}
|
||||
|
||||
// These methods are intended to be used by MockXRInputSource only.
|
||||
addInputSource(source) {
|
||||
let index = this.input_sources_.indexOf(source);
|
||||
if (index == -1) {
|
||||
this.input_sources_.push(source);
|
||||
}
|
||||
}
|
||||
|
||||
removeInputSource(source) {
|
||||
let index = this.input_sources_.indexOf(source);
|
||||
if (index >= 0) {
|
||||
this.input_sources_.splice(index, 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Mojo function implementations.
|
||||
|
||||
// XRFrameDataProvider implementation.
|
||||
|
@ -426,6 +454,19 @@ class MockRuntime {
|
|||
this.pose_.poseIndex++;
|
||||
this.pose_.poseReset = this.send_pose_reset_;
|
||||
this.send_pose_reset_ = false;
|
||||
|
||||
// Setting the input_state to null tests a slightly different path than
|
||||
// the browser tests where if the last input source is removed, the device
|
||||
// code always sends up an empty array, but it's also valid mojom to send
|
||||
// up a null array.
|
||||
if (this.input_sources_.length > 0) {
|
||||
this.pose_.inputState = [];
|
||||
for (let i = 0; i < this.input_sources_.length; i++) {
|
||||
this.pose_.inputState.push(this.input_sources_[i].getInputSourceState());
|
||||
}
|
||||
} else {
|
||||
this.pose_.inputState = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Convert current document time to monotonic time.
|
||||
|
@ -516,6 +557,147 @@ class MockRuntime {
|
|||
};
|
||||
}
|
||||
|
||||
class MockXRInputSource {
|
||||
constructor(fakeInputSourceInit, id, pairedDevice) {
|
||||
this.source_id_ = id;
|
||||
this.pairedDevice_ = pairedDevice;
|
||||
this.handedness_ = fakeInputSourceInit.handedness;
|
||||
this.target_ray_mode_ = fakeInputSourceInit.targetRayMode;
|
||||
this.setPointerOrigin(fakeInputSourceInit.pointerOrigin);
|
||||
|
||||
this.primary_input_pressed_ = false;
|
||||
if (fakeInputSourceInit.selectionStarted != null) {
|
||||
this.primary_input_pressed_ = fakeInputSourceInit.selectionStarted;
|
||||
}
|
||||
|
||||
this.primary_input_clicked_ = false;
|
||||
if (fakeInputSourceInit.selectionClicked != null) {
|
||||
this.primary_input_clicked_ = fakeInputSourceInit.selectionClicked;
|
||||
}
|
||||
|
||||
this.grip_ = null;
|
||||
if (fakeInputSourceInit.gripOrigin != null) {
|
||||
this.setGripOrigin(fakeInputSourceInit.gripOrigin);
|
||||
}
|
||||
|
||||
this.gamepad_ = null;
|
||||
this.emulated_position_ = false;
|
||||
this.desc_dirty_ = true;
|
||||
}
|
||||
|
||||
// Webxr-test-api
|
||||
setHandedness(handedness) {
|
||||
if (this.handedness_ != handedness) {
|
||||
this.desc_dirty_ = true;
|
||||
this.handedness_ = handedness;
|
||||
}
|
||||
}
|
||||
|
||||
setTargetRayMode(targetRayMode) {
|
||||
if (this.target_ray_mode_ != targetRayMode) {
|
||||
this.desc_dirty_ = true;
|
||||
this.target_ray_mode_ = targetRayMode;
|
||||
}
|
||||
}
|
||||
|
||||
setProfiles(profiles) {
|
||||
// Profiles are not yet implemented by chromium
|
||||
}
|
||||
|
||||
setGripOrigin(transform, emulatedPosition = false) {
|
||||
this.grip_ = new gfx.mojom.Transform();
|
||||
this.grip_.matrix = getMatrixFromTransform(transform);
|
||||
this.emulated_position_ = emulatedPosition;
|
||||
}
|
||||
|
||||
clearGripOrigin() {
|
||||
if (this.grip_ != null) {
|
||||
this.grip_ = null;
|
||||
this.emulated_position_ = false;
|
||||
}
|
||||
}
|
||||
|
||||
setPointerOrigin(transform, emulatedPosition = false) {
|
||||
this.desc_dirty_ = true;
|
||||
this.pointer_offset_ = new gfx.mojom.Transform();
|
||||
this.pointer_offset_.matrix = getMatrixFromTransform(transform);
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
this.pairedDevice_.removeInputSource(this);
|
||||
}
|
||||
|
||||
reconnect() {
|
||||
this.pairedDevice_.addInputSource(this);
|
||||
}
|
||||
|
||||
startSelection() {
|
||||
this.primary_input_pressed_ = true;
|
||||
}
|
||||
|
||||
endSelection() {
|
||||
if (!this.primary_input_pressed_) {
|
||||
throw new Error("Attempted to end selection which was not started");
|
||||
}
|
||||
|
||||
this.primary_input_pressed_ = false;
|
||||
this.primary_input_clicked_ = true;
|
||||
}
|
||||
|
||||
simulateSelect() {
|
||||
this.primary_input_clicked_ = true;
|
||||
}
|
||||
|
||||
// Helpers for Mojom
|
||||
getInputSourceState() {
|
||||
let input_state = new device.mojom.XRInputSourceState();
|
||||
|
||||
input_state.sourceId = this.source_id_;
|
||||
|
||||
input_state.primaryInputPressed = this.primary_input_pressed_;
|
||||
input_state.primaryInputClicked = this.primary_input_clicked_;
|
||||
|
||||
input_state.grip = this.grip_;
|
||||
|
||||
input_state.gamepad = this.gamepad_;
|
||||
|
||||
if (this.desc_dirty_) {
|
||||
let input_desc = new device.mojom.XRInputSourceDescription();
|
||||
|
||||
input_desc.emulatedPosition = this.emulated_position_;
|
||||
|
||||
switch (this.target_ray_mode_) {
|
||||
case 'gaze':
|
||||
input_desc.targetRayMode = device.mojom.XRTargetRayMode.GAZING;
|
||||
break;
|
||||
case 'tracked-pointer':
|
||||
input_desc.targetRayMode = device.mojom.XRTargetRayMode.POINTING;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (this.handedness_) {
|
||||
case 'left':
|
||||
input_desc.handedness = device.mojom.XRHandedness.LEFT;
|
||||
break;
|
||||
case 'right':
|
||||
input_desc.handedness = device.mojom.XRHandedness.RIGHT;
|
||||
break;
|
||||
default:
|
||||
input_desc.handedness = device.mojom.XRHandedness.NONE;
|
||||
break;
|
||||
}
|
||||
|
||||
input_desc.pointerOffset = this.pointer_offset_;
|
||||
|
||||
input_state.description = input_desc;
|
||||
|
||||
this.desc_dirty_ = false;
|
||||
}
|
||||
|
||||
return input_state;
|
||||
}
|
||||
}
|
||||
|
||||
// Mojo helper classes
|
||||
class MockXRPresentationProvider {
|
||||
constructor() {
|
||||
|
|
|
@ -16,6 +16,9 @@
|
|||
test_computed_value("fill-opacity", "-1", "0");
|
||||
test_computed_value("fill-opacity", "0.5");
|
||||
test_computed_value("fill-opacity", "3", "1");
|
||||
test_computed_value("fill-opacity", "-100%", "0");
|
||||
test_computed_value("fill-opacity", "50%", "0.5");
|
||||
test_computed_value("fill-opacity", "300%", "1");
|
||||
|
||||
]]></script>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 790 B After Width: | Height: | Size: 942 B |
|
@ -16,9 +16,9 @@
|
|||
test_valid_value("fill-opacity", "-1");
|
||||
test_valid_value("fill-opacity", "0.5");
|
||||
test_valid_value("fill-opacity", "3");
|
||||
test_valid_value("fill-opacity", "-100%");
|
||||
test_valid_value("fill-opacity", "50%");
|
||||
test_valid_value("fill-opacity", "300%");
|
||||
test_valid_value("fill-opacity", "-100%", "-1");
|
||||
test_valid_value("fill-opacity", "50%", "0.5");
|
||||
test_valid_value("fill-opacity", "300%", "3");
|
||||
|
||||
]]></script>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 907 B After Width: | Height: | Size: 925 B |
|
@ -16,6 +16,9 @@
|
|||
test_computed_value("stroke-opacity", "-1", "0");
|
||||
test_computed_value("stroke-opacity", "0.5");
|
||||
test_computed_value("stroke-opacity", "3", "1");
|
||||
test_computed_value("stroke-opacity", "-100%", "0");
|
||||
test_computed_value("stroke-opacity", "50%", "0.5");
|
||||
test_computed_value("stroke-opacity", "300%", "1");
|
||||
|
||||
]]></script>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 810 B After Width: | Height: | Size: 968 B |
|
@ -16,9 +16,9 @@
|
|||
test_valid_value("stroke-opacity", "-1");
|
||||
test_valid_value("stroke-opacity", "0.5");
|
||||
test_valid_value("stroke-opacity", "3");
|
||||
test_valid_value("stroke-opacity", "-100%");
|
||||
test_valid_value("stroke-opacity", "50%");
|
||||
test_valid_value("stroke-opacity", "300%");
|
||||
test_valid_value("stroke-opacity", "-100%", "-1");
|
||||
test_valid_value("stroke-opacity", "50%", "0.5");
|
||||
test_valid_value("stroke-opacity", "300%", "3");
|
||||
|
||||
]]></script>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 925 B After Width: | Height: | Size: 943 B |
|
@ -16,6 +16,9 @@
|
|||
test_computed_value("stop-opacity", "-1", "0");
|
||||
test_computed_value("stop-opacity", "0.5");
|
||||
test_computed_value("stop-opacity", "3", "1");
|
||||
test_computed_value("stop-opacity", "-100%", "0");
|
||||
test_computed_value("stop-opacity", "50%", "0.5");
|
||||
test_computed_value("stop-opacity", "300%", "1");
|
||||
|
||||
]]></script>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 803 B After Width: | Height: | Size: 955 B |
|
@ -16,9 +16,9 @@
|
|||
test_valid_value("stop-opacity", "-1");
|
||||
test_valid_value("stop-opacity", "0.5");
|
||||
test_valid_value("stop-opacity", "3");
|
||||
test_valid_value("stop-opacity", "-100%");
|
||||
test_valid_value("stop-opacity", "50%");
|
||||
test_valid_value("stop-opacity", "300%");
|
||||
test_valid_value("stop-opacity", "-100%", "-1");
|
||||
test_valid_value("stop-opacity", "50%", "0.5");
|
||||
test_valid_value("stop-opacity", "300%", "3");
|
||||
|
||||
]]></script>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 912 B After Width: | Height: | Size: 930 B |
|
@ -95,10 +95,10 @@ class FontInstaller(object):
|
|||
from ctypes import wintypes
|
||||
wparam = 0
|
||||
lparam = 0
|
||||
SendMessageW = ctypes.windll.user32.SendMessageW
|
||||
SendMessageW.argtypes = [wintypes.HANDLE, wintypes.UINT,
|
||||
SendNotifyMessageW = ctypes.windll.user32.SendNotifyMessageW
|
||||
SendNotifyMessageW.argtypes = [wintypes.HANDLE, wintypes.UINT,
|
||||
wintypes.WPARAM, wintypes.LPARAM]
|
||||
return bool(SendMessageW(hwnd_broadcast, wm_fontchange,
|
||||
return bool(SendNotifyMessageW(hwnd_broadcast, wm_fontchange,
|
||||
wparam, lparam))
|
||||
|
||||
def remove_linux_font(self, font_name, _):
|
||||
|
@ -129,8 +129,8 @@ class FontInstaller(object):
|
|||
from ctypes import wintypes
|
||||
wparam = 0
|
||||
lparam = 0
|
||||
SendMessageW = ctypes.windll.user32.SendMessageW
|
||||
SendMessageW.argtypes = [wintypes.HANDLE, wintypes.UINT,
|
||||
SendNotifyMessageW = ctypes.windll.user32.SendNotifyMessageW
|
||||
SendNotifyMessageW.argtypes = [wintypes.HANDLE, wintypes.UINT,
|
||||
wintypes.WPARAM, wintypes.LPARAM]
|
||||
return bool(SendMessageW(hwnd_broadcast, wm_fontchange,
|
||||
return bool(SendNotifyMessageW(hwnd_broadcast, wm_fontchange,
|
||||
wparam, lparam))
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
`context.sampleRate (${context.sampleRate} Hz)`).beGreaterThan(0);
|
||||
|
||||
defaultLatency = context.baseLatency;
|
||||
should(defaultLatency, 'default baseLatency').beGreaterThan(0);
|
||||
should(defaultLatency, 'default baseLatency').beGreaterThanOrEqualTo(0);
|
||||
|
||||
// Verify that an AudioContext can be created with the expected
|
||||
// latency types.
|
||||
|
@ -130,7 +130,7 @@
|
|||
should(context1.baseLatency, 'high latency context baseLatency')
|
||||
.beEqualTo(context2.baseLatency);
|
||||
should(context1.baseLatency, 'high latency context baseLatency')
|
||||
.beGreaterThan(interactiveLatency);
|
||||
.beGreaterThanOrEqualTo(interactiveLatency);
|
||||
closingPromises.push(context1.close());
|
||||
closingPromises.push(context2.close());
|
||||
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
/**
|
||||
* @class ActiveProcessingTester
|
||||
* @extends AudioWorkletProcessor
|
||||
*
|
||||
* This processor class sends a message to its AudioWorkletNodew whenever the
|
||||
* number of channels on the input changes. The message includes the actual
|
||||
* number of channels, the context time at which this occurred, and whether
|
||||
* we're done processing or not.
|
||||
*/
|
||||
class ActiveProcessingTester extends AudioWorkletProcessor {
|
||||
constructor(options) {
|
||||
super(options);
|
||||
this._lastChannelCount = 0;
|
||||
|
||||
// See if user specified a value for test duration.
|
||||
if (options.hasOwnProperty('processorOptions') &&
|
||||
options.processorOptions.hasOwnProperty('testDuration')) {
|
||||
this._testDuration = options.processorOptions.testDuration;
|
||||
} else {
|
||||
this._testDuration = 5;
|
||||
}
|
||||
|
||||
// Time at which we'll signal we're done, based on the requested
|
||||
// |testDuration|
|
||||
this._endTime = currentTime + this._testDuration;
|
||||
}
|
||||
|
||||
process(inputs, outputs) {
|
||||
const input = inputs[0];
|
||||
const output = outputs[0];
|
||||
const inputChannelCount = input.length;
|
||||
const isFinished = currentTime > this._endTime;
|
||||
|
||||
// Send a message if we're done or the count changed.
|
||||
if (isFinished || (inputChannelCount != this._lastChannelCount)) {
|
||||
this.port.postMessage({
|
||||
channelCount: inputChannelCount,
|
||||
finished: isFinished,
|
||||
time: currentTime
|
||||
});
|
||||
this._lastChannelCount = inputChannelCount;
|
||||
}
|
||||
|
||||
// Just copy the input to the output for no particular reason.
|
||||
for (let channel = 0; channel < input.length; ++channel) {
|
||||
output[channel].set(input[channel]);
|
||||
}
|
||||
|
||||
// When we're finished, this method no longer needs to be called.
|
||||
return !isFinished;
|
||||
}
|
||||
}
|
||||
|
||||
registerProcessor('active-processing-tester', ActiveProcessingTester);
|
|
@ -6,100 +6,85 @@
|
|||
</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/webaudio/resources/audit-util.js"></script>
|
||||
<script src="/webaudio/resources/audit.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<script id="layout-test-code">
|
||||
let audit = Audit.createTaskRunner();
|
||||
// AudioProcessor that sends a message to its AudioWorkletNode whenver the
|
||||
// number of channels on its input changes.
|
||||
let filePath =
|
||||
'../the-audioworklet-interface/processors/active-processing.js';
|
||||
|
||||
// The sample rate MUST be a power of two to eliminate round-off when
|
||||
// computing render boundaries but is otherwise arbitrary. And we only new
|
||||
// a few blocks for rendering to see if things are working.
|
||||
let sampleRate = 8192;
|
||||
let renderLength = 10 * RENDER_QUANTUM_FRAMES;
|
||||
const audit = Audit.createTaskRunner();
|
||||
|
||||
let context;
|
||||
|
||||
audit.define('initialize', (task, should) => {
|
||||
// Create context and load the module
|
||||
context = new AudioContext();
|
||||
should(
|
||||
context.audioWorklet.addModule(filePath),
|
||||
'AudioWorklet module loading')
|
||||
.beResolved()
|
||||
.then(() => task.done());
|
||||
});
|
||||
|
||||
audit.define('test', (task, should) => {
|
||||
const src = new OscillatorNode(context);
|
||||
|
||||
// Number of inputs for the ChannelMergerNode. Pretty arbitrary, but
|
||||
// should not be 1.
|
||||
let numberOfInputs = 7;
|
||||
const numberOfInputs = 7;
|
||||
const merger =
|
||||
new ChannelMergerNode(context, {numberOfInputs: numberOfInputs});
|
||||
|
||||
// How many frames the source should run. Arbitrary but should be more
|
||||
// than a render quantum.
|
||||
let sourceDurationFrames = 131;
|
||||
|
||||
// Frame at which to connect the source to the merger
|
||||
let connectFrame = 2 * RENDER_QUANTUM_FRAMES;
|
||||
|
||||
// AudioProcessor that counts the number of channels on its single input.
|
||||
let filePath =
|
||||
'../the-audioworklet-interface/processors/input-count-processor.js';
|
||||
|
||||
audit.define(
|
||||
{
|
||||
label: 'Test',
|
||||
description: 'Active processing for ChannelMergerNode'
|
||||
},
|
||||
async (task, should) => {
|
||||
const context = new OfflineAudioContext({
|
||||
numberOfChannels: numberOfInputs,
|
||||
length: renderLength,
|
||||
sampleRate: sampleRate
|
||||
const testerNode =
|
||||
new AudioWorkletNode(context, 'active-processing-tester', {
|
||||
// Use as short a duration as possible to keep the test from
|
||||
// taking too much time.
|
||||
processorOptions: {testDuration: .5},
|
||||
});
|
||||
|
||||
// Don't mix the inputs to the destination!
|
||||
context.destination.channelInterpretation = 'discrete';
|
||||
// Expected number of output channels from the merger node. We should
|
||||
// start with the number of inputs, because the source (oscillator) is
|
||||
// actively processing. When the source stops, the number of channels
|
||||
// should change to 1.
|
||||
const expectedValues = [numberOfInputs, 1];
|
||||
let index = 0;
|
||||
|
||||
await context.audioWorklet.addModule(filePath);
|
||||
testerNode.port.onmessage = event => {
|
||||
let count = event.data.channelCount;
|
||||
let finished = event.data.finished;
|
||||
|
||||
let src = new ConstantSourceNode(context);
|
||||
let merger = new ChannelMergerNode(
|
||||
context, {numberOfInputs: numberOfInputs});
|
||||
let counter = new AudioWorkletNode(context, 'counter');
|
||||
|
||||
// Just to print a message that we created the graph with a
|
||||
// convolver in it.
|
||||
should(
|
||||
() => {
|
||||
merger.connect(counter).connect(context.destination);
|
||||
},
|
||||
`Construction of graph with ChannelMergerNode with ${
|
||||
merger.numberOfInputs} inputs`)
|
||||
.notThrow()
|
||||
|
||||
// Connect the source now and start it and let it run for
|
||||
// |sourceDurationFrames| frames.
|
||||
context.suspend(connectFrame / context.sampleRate)
|
||||
.then(() => {
|
||||
src.connect(merger, 0, 0);
|
||||
src.start();
|
||||
src.stop(
|
||||
context.currentTime +
|
||||
sourceDurationFrames / context.sampleRate);
|
||||
})
|
||||
.then(() => context.resume());
|
||||
|
||||
const renderedBuffer = await context.startRendering();
|
||||
// The expected output is something like:
|
||||
//
|
||||
// 1, 1, 1,..., 7, 7, 7.,,,, 1, 1, 1
|
||||
//
|
||||
// When the merger has no inputs, it's not actively processing
|
||||
// so it must output mono silence. After connecting a source,
|
||||
// the number of channels of the output should be the same as
|
||||
// the number of inputs to the merger. Finally, when the
|
||||
// source stops, the merger is not actively processing anymore
|
||||
// and should output mono silence again. For this test, we
|
||||
// don't care too much how many different values there are.
|
||||
// There just has to be at least one of each value, in the
|
||||
// order given.
|
||||
const output = renderedBuffer.getChannelData(0);
|
||||
|
||||
should(output, 'Number of output channels').containValues([
|
||||
1, numberOfInputs, 1
|
||||
]);
|
||||
// If we're finished, end testing.
|
||||
if (finished) {
|
||||
// Verify that we got the expected number of changes.
|
||||
should(index, 'Number of distinct values')
|
||||
.beEqualTo(expectedValues.length);
|
||||
|
||||
task.done();
|
||||
return;
|
||||
}
|
||||
|
||||
if (index < expectedValues.length) {
|
||||
// Verify that the number of channels matches the expected number of
|
||||
// channels.
|
||||
should(count, `Test ${index}: Number of convolver output channels`)
|
||||
.beEqualTo(expectedValues[index]);
|
||||
}
|
||||
|
||||
++index;
|
||||
};
|
||||
|
||||
// Create the graph and go
|
||||
src.connect(merger).connect(testerNode).connect(context.destination);
|
||||
src.start();
|
||||
|
||||
// Stop the source after a short time so we can test that the channel
|
||||
// merger changes to not actively processing and thus produces a single
|
||||
// channel of silence.
|
||||
src.stop(context.currentTime + .1);
|
||||
});
|
||||
|
||||
audit.run();
|
||||
|
|
|
@ -40,4 +40,6 @@ def test_file_protocol(session, server_config):
|
|||
response = navigate_to(session, url)
|
||||
assert_success(response)
|
||||
|
||||
if session.url.endswith('/'):
|
||||
url += '/'
|
||||
assert session.url == url
|
||||
|
|
|
@ -29,22 +29,38 @@ const VALID_PROJECTION_MATRIX =
|
|||
[1, 0, 0, 0, 0, 1, 0, 0, 3, 2, -1, -1, 0, 0, -0.2, 0];
|
||||
|
||||
// A valid input grip matrix for when we don't care about specific values
|
||||
const VALID_GRIP = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4, 3, 2, 1];
|
||||
const VALID_GRIP = [1, 0, 0, 0,
|
||||
0, 1, 0, 0,
|
||||
0, 0, 1, 0,
|
||||
4, 3, 2, 1];
|
||||
|
||||
const VALID_GRIP_TRANSFORM = {
|
||||
position: [4, 3, 2],
|
||||
orientation: [0, 0, 0, 1]
|
||||
};
|
||||
|
||||
// A valid input pointer offset for when we don't care about specific values
|
||||
const VALID_POINTER_OFFSET = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1];
|
||||
const VALID_POINTER_OFFSET = [1, 0, 0, 0,
|
||||
0, 1, 0, 0,
|
||||
0, 0, 1, 0,
|
||||
0, 0, 1, 1];
|
||||
|
||||
const VALID_POINTER_TRANSFORM = {
|
||||
position: [0, 0, 1],
|
||||
orientation: [0, 0, 0, 1]
|
||||
};
|
||||
|
||||
const VALID_GRIP_WITH_POINTER_OFFSET =
|
||||
[1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4, 3, 3, 1];
|
||||
|
||||
// A Valid Local to floor matrix/transform for when we don't care about specific
|
||||
// values. Note that these should be identical, just different representations.
|
||||
const VALID_LOCAL_TO_FLOOR_MATRIX = [1, 0, 0, 0,
|
||||
const VALID_FLOOR_ORIGIN_MATRIX = [1, 0, 0, 0,
|
||||
0, 1, 0, 0,
|
||||
0, 0, 1, 0,
|
||||
1, 1.65, -1, 1];
|
||||
|
||||
const VALID_LOCAL_TO_FLOOR_TRANSFORM = {
|
||||
const VALID_FLOOR_ORIGIN = {
|
||||
position: [1.0, 1.65, -1.0],
|
||||
orientation: [0, 0, 0, 1]
|
||||
};
|
||||
|
@ -105,3 +121,17 @@ const VALID_NON_IMMERSIVE_DEVICE = {
|
|||
views: NON_IMMERSIVE_VIEWS,
|
||||
viewerOrigin: IDENTITY_TRANSFORM
|
||||
};
|
||||
|
||||
const VALID_CONTROLLER = {
|
||||
handedness: "none",
|
||||
targetRayMode: "tracked-pointer",
|
||||
pointerOrigin: VALID_POINTER_TRANSFORM,
|
||||
profiles: []
|
||||
};
|
||||
|
||||
const RIGHT_CONTROLLER = {
|
||||
handedness: "right",
|
||||
targetRayMode: "tracked-pointer",
|
||||
pointerOrigin: VALID_POINTER_TRANSFORM,
|
||||
profiles: []
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ let fakeDeviceInitParams = {
|
|||
supportsImmersive: true,
|
||||
views: VALID_VIEWS,
|
||||
viewerOrigin: IDENTITY_TRANSFORM,
|
||||
localToFloorLevelTransform: VALID_LOCAL_TO_FLOOR_TRANSFORM
|
||||
floorOrigin: VALID_FLOOR_ORIGIN
|
||||
};
|
||||
|
||||
let testFunction = function(session, fakeDeviceController, t) {
|
||||
|
|
|
@ -32,7 +32,7 @@ let testFunction = function(session, fakeDeviceController, t) {
|
|||
assert_greater_than(poseMatrix[13], 1.0);
|
||||
assert_approx_equals(poseMatrix[14], 0.0, FLOAT_EPSILON);
|
||||
|
||||
fakeDeviceController.setLocalToFloorLevelTransform(VALID_LOCAL_TO_FLOOR_TRANSFORM);
|
||||
fakeDeviceController.setFloorOrigin(VALID_FLOOR_ORIGIN);
|
||||
|
||||
// Need to request one animation frame for the new stage transform to
|
||||
// propagate before we check that it's what we expect.
|
||||
|
@ -49,7 +49,7 @@ let testFunction = function(session, fakeDeviceController, t) {
|
|||
assert_not_equals(pose, null);
|
||||
|
||||
let poseMatrix = pose.transform.matrix;
|
||||
assert_matrix_approx_equals(poseMatrix, VALID_LOCAL_TO_FLOOR_MATRIX, FLOAT_EPSILON);
|
||||
assert_matrix_approx_equals(poseMatrix, VALID_FLOOR_ORIGIN_MATRIX, FLOAT_EPSILON);
|
||||
});
|
||||
|
||||
// Finished.
|
||||
|
|