mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Auto merge of #26995 - servo-wpt-sync:wpt_update_19-06-2020, r=jdm
Sync WPT with upstream (19-06-2020) Automated downstream sync of changes from upstream as of 19-06-2020. [no-wpt-sync] r? @servo-wpt-sync
This commit is contained in:
commit
0b61cfc3ae
97 changed files with 1486 additions and 195 deletions
|
@ -0,0 +1,2 @@
|
|||
[floats-clear-multicol-000.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[floats-clear-multicol-001.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[floats-clear-multicol-002.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[floats-clear-multicol-003.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[floats-clear-multicol-balancing-000.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[floats-clear-multicol-balancing-001.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[floats-clear-multicol-balancing-002.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[floats-clear-multicol-balancing-003.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-002.html]
|
||||
[Hit test float]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[hit-test-floats-005.html]
|
||||
[Miss clipped float]
|
||||
expected: FAIL
|
||||
|
|
@ -8,6 +8,3 @@
|
|||
[throws if handleEvent is thruthy and not callable]
|
||||
expected: FAIL
|
||||
|
||||
[doesn't look up handleEvent method on callable event listeners]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[elementFromPoint-float-in-table.html]
|
||||
[float-in-div]
|
||||
expected: FAIL
|
||||
|
|
@ -2,3 +2,6 @@
|
|||
[elementsFromPoint on the root document for points in iframe elements]
|
||||
expected: FAIL
|
||||
|
||||
[elementsFromPoint on inner documents]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[elementsFromPoint-invalid-cases.html]
|
||||
[The root element is the last element returned for otherwise empty queries within the viewport]
|
||||
expected: FAIL
|
||||
|
|
@ -312,12 +312,6 @@
|
|||
[Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK]
|
||||
expected: NOTRUN
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -327,12 +321,18 @@
|
|||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,6 +11,6 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff]
|
||||
[X-Content-Type-Options%3A%20'NosniFF']
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_2.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[opener of discarded nested browsing context]
|
||||
expected: FAIL
|
||||
|
||||
[opener of discarded auxiliary browsing context]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -9,7 +10,7 @@
|
|||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-2.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
[inserted-or-removed.html]
|
||||
[The last selected OPTION should win; Inserted by parser]
|
||||
expected: FAIL
|
||||
|
||||
[The last selected OPTION should win; Inserted by DOM API]
|
||||
expected: FAIL
|
||||
|
||||
[The last selected OPTION should win; Inserted by innerHTML]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
[ignore-opens-during-unload.window.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[document.open should bail out when ignore-opens-during-unload is greater than 0 during visibilitychange event (open(parent) while unloading parent and child)]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -3,3 +3,6 @@
|
|||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: TIMEOUT
|
||||
|
||||
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
[003.html]
|
||||
expected: ERROR
|
||||
[shared]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
[shared-worker-in-data-url-context.window.html]
|
||||
expected: TIMEOUT
|
||||
[Create a shared worker in a data url frame]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Create a data url shared worker in a data url frame]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -56084,6 +56084,110 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"floats-clear-multicol-000.html": [
|
||||
"3598a2f7aba955b5ba3e6ee1739bfd468d2b28ea",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/CSS2/floats-clear/floats-clear-multicol-000-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"floats-clear-multicol-001.html": [
|
||||
"dbcb3b557b918b6b63a9005cd8ff0de6f7c4f8c1",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/CSS2/floats-clear/floats-clear-multicol-000-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"floats-clear-multicol-002.html": [
|
||||
"877ffed2c2f37f2bc3d7808cfdbe3ebed313d91c",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/CSS2/floats-clear/floats-clear-multicol-000-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"floats-clear-multicol-003.html": [
|
||||
"3f951b67f9fcf3c6384ff29c058ee249b36a047c",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/CSS2/floats-clear/floats-clear-multicol-000-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"floats-clear-multicol-balancing-000.html": [
|
||||
"a4f3379eca002adbe13b960198967425f7c13787",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/CSS2/floats-clear/floats-clear-multicol-balancing-000-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"floats-clear-multicol-balancing-001.html": [
|
||||
"9c8f8148d06727ebf1c166811ef4e2c373339a32",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/CSS2/floats-clear/floats-clear-multicol-balancing-000-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"floats-clear-multicol-balancing-002.html": [
|
||||
"e0343b0ce7a0f7030e2c3b1d9ae3d1056a9bebb3",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/CSS2/floats-clear/floats-clear-multicol-balancing-000-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"floats-clear-multicol-balancing-003.html": [
|
||||
"8b68f3ad4ebbf98a67875f4823e8c7a348a80421",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/CSS2/floats-clear/floats-clear-multicol-balancing-000-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"margin-collapse-018.xht": [
|
||||
"f509ad1ac4f8d7c7af8b4cc86e0089fbb001762b",
|
||||
[
|
||||
|
@ -154038,6 +154142,19 @@
|
|||
]
|
||||
},
|
||||
"css-multicol": {
|
||||
"always-balancing-before-column-span.html": [
|
||||
"a80617b96ef8c4e1061640ac0347c5a5cd96af71",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"as-column-flex-item.html": [
|
||||
"21ff8d8d50cf97ecb22cd05cf1ae774d4aa81cdd",
|
||||
[
|
||||
|
@ -156989,6 +157106,19 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"no-balancing-after-column-span.html": [
|
||||
"8c05ffdd27fd774ff5b9061af8c471bd2bcfa1bf",
|
||||
[
|
||||
null,
|
||||
[
|
||||
[
|
||||
"/css/reference/ref-filled-green-100px-square.xht",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
{}
|
||||
]
|
||||
],
|
||||
"orthogonal-writing-mode-shrink-to-fit.html": [
|
||||
"b087f56ac6e06d7e11d719976ae66459c97722d7",
|
||||
[
|
||||
|
@ -249023,6 +249153,10 @@
|
|||
"b5d7176150d0403a87dfd2b9e59af219ddb6b9bb",
|
||||
[]
|
||||
],
|
||||
"webkit-box-fixed-position-child.html": [
|
||||
"bb61b63133b402e92d0444e7afb3f4c4b9f311c6",
|
||||
[]
|
||||
],
|
||||
"webkit-box-horizontal-reverse-variants-ref.html": [
|
||||
"72d0b2c6f6851764453f79cf71fc19be73bcb0e8",
|
||||
[]
|
||||
|
@ -276021,6 +276155,14 @@
|
|||
"979298deabb4297507e001085411e55e47fff23c",
|
||||
[]
|
||||
],
|
||||
"floats-clear-multicol-000-ref.html": [
|
||||
"90c2d6abcbf3d3caa8fce8e2412011037b288a12",
|
||||
[]
|
||||
],
|
||||
"floats-clear-multicol-balancing-000-ref.html": [
|
||||
"78b7ffaf2d1a6db9064d1968a47c65b1540e57b0",
|
||||
[]
|
||||
],
|
||||
"margin-collapse-024-ref.xht": [
|
||||
"25ad3800bebc8b82976612632456aff51192bc5f",
|
||||
[]
|
||||
|
@ -321885,11 +322027,11 @@
|
|||
[]
|
||||
],
|
||||
"cors-cookie.py": [
|
||||
"c35824ff437feed72364181b57d7732c170722ab",
|
||||
"9eaab9b95a0b7d44bf57431891a59006676ddb90",
|
||||
[]
|
||||
],
|
||||
"cors.py": [
|
||||
"42a0a0bb5843389674453fc56d8a87c67cd48dcd",
|
||||
"bc0c1089fe374958383aecd70d5da5a91a5b8037",
|
||||
[]
|
||||
],
|
||||
"eventsource-onmessage-realm.htm": [
|
||||
|
@ -321901,7 +322043,7 @@
|
|||
[]
|
||||
],
|
||||
"last-event-id.py": [
|
||||
"2b74bf66a286ff65b386662412018002c762dee2",
|
||||
"a2cb72644570d95c365e5153f3cd2126576affb6",
|
||||
[]
|
||||
],
|
||||
"last-event-id2.py": [
|
||||
|
@ -321909,23 +322051,23 @@
|
|||
[]
|
||||
],
|
||||
"message.py": [
|
||||
"6d04b1fbe40dfbdf16faf2171ef5527a85f3b951",
|
||||
"468564f4df083fca0e4835c2b95cf1fc9201760b",
|
||||
[]
|
||||
],
|
||||
"message2.py": [
|
||||
"ce339d927e3133339123711e5c9cef8c4e75b353",
|
||||
"cfe908406fc1c64bfee94f285d6335f80b5ec722",
|
||||
[]
|
||||
],
|
||||
"reconnect-fail.py": [
|
||||
"80a247d5974bf9351318073ad017fcaed4af3e8a",
|
||||
"12b07700cd0d29ac5988ba0b3bd77db276e2289f",
|
||||
[]
|
||||
],
|
||||
"status-error.py": [
|
||||
"f0a1504bdd363c46259cd744c065039632ca02a8",
|
||||
"ed5687b6c2b93cd1b11c07d4a5e9caf5e154890d",
|
||||
[]
|
||||
],
|
||||
"status-reconnect.py": [
|
||||
"16c6502e3666365c0558cd6db9074acf3e895fa5",
|
||||
"a59f751fc36846725fe7bcbcb2c3f91ea8437d3e",
|
||||
[]
|
||||
]
|
||||
},
|
||||
|
@ -326532,7 +326674,7 @@
|
|||
[]
|
||||
],
|
||||
"canvas-tests.js": [
|
||||
"76313bc8fbac27672128b56cb3327feaf95164e4",
|
||||
"0ccb475b763d1e9d7d6733ff27d93dce56828f3a",
|
||||
[]
|
||||
],
|
||||
"canvas-tests.js.headers": [
|
||||
|
@ -336842,7 +336984,7 @@
|
|||
[]
|
||||
],
|
||||
"picture-in-picture.idl": [
|
||||
"3d3bad08219af2e422f2cb0d4cabeffa1f8a2b80",
|
||||
"195977335603240eeb9f4b1391a5b2e6aa3c2441",
|
||||
[]
|
||||
],
|
||||
"pointerevents.idl": [
|
||||
|
@ -353227,7 +353369,7 @@
|
|||
[]
|
||||
],
|
||||
"requirements.txt": [
|
||||
"3baefa50ea981974be66b6e226e050e59e034c22",
|
||||
"90d0cb6cdc8795c9b39e7644fd330283653b48e4",
|
||||
[]
|
||||
],
|
||||
"revlist.py": [
|
||||
|
@ -353329,7 +353471,7 @@
|
|||
]
|
||||
},
|
||||
"requirements.txt": [
|
||||
"5310721bbb90fa94b90b4c10d202fc5a13c04d58",
|
||||
"d1d733b86b21cc17978a08b1715d6917e3d3b747",
|
||||
[]
|
||||
],
|
||||
"requirements_android_webview.txt": [
|
||||
|
@ -353377,7 +353519,7 @@
|
|||
[]
|
||||
],
|
||||
"requirements_sauce.txt": [
|
||||
"e9e97647796e7f940f2eef98c72b19871d323c72",
|
||||
"5f70629d81b73302bf0b6ab48a172f761199807d",
|
||||
[]
|
||||
],
|
||||
"requirements_servo.txt": [
|
||||
|
@ -356727,7 +356869,7 @@
|
|||
},
|
||||
"simulcast": {
|
||||
"simulcast.js": [
|
||||
"af804c03e865ae1be94cdc1045f359b30034590a",
|
||||
"018ebf63abf7b213218561b0ae00ff8ba57b800f",
|
||||
[]
|
||||
]
|
||||
},
|
||||
|
@ -359164,6 +359306,12 @@
|
|||
[]
|
||||
]
|
||||
},
|
||||
"window-segments": {
|
||||
"post-window-segments-sub-frame.html": [
|
||||
"f4d1b405305fae75497732add6ad42063d5daaca",
|
||||
[]
|
||||
]
|
||||
},
|
||||
"workers": {
|
||||
"META.yml": [
|
||||
"a7297d3844728b8bb2f7c82a2c4f32d65040a919",
|
||||
|
@ -361312,6 +361460,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"url-charset.window.js": [
|
||||
"4eb103db35d27af9bef1954ce71f6c9f54c48e20",
|
||||
[
|
||||
"FileAPI/url/url-charset.window.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"url-format.any.js": [
|
||||
"33732fa61fc3ddd0f52b23fe83ea824cc6abae06",
|
||||
[
|
||||
|
@ -407734,6 +407889,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"elementFromPoint-float-in-table.html": [
|
||||
"73713382eacfeba0d46a39165793f5906f15a2eb",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"elementFromPoint-list-001.html": [
|
||||
"b31453d6c32c2c7ed8192dc1e4b5037476645bcd",
|
||||
[
|
||||
|
@ -462339,6 +462501,13 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"inserted-or-removed.html": [
|
||||
"1b3f8631a57c1bd3babcc20d66f6fa08c6be8973",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"select-add.html": [
|
||||
"910be348ae765df079970f4fc7f38cbbf955454d",
|
||||
[
|
||||
|
@ -481031,7 +481200,7 @@
|
|||
]
|
||||
],
|
||||
"leave-picture-in-picture.html": [
|
||||
"22445c216ef165de88deca5df1e590b5397f6b99",
|
||||
"a0fbcb23e57e1402e51f7f5cbd52da611c0ea691",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -494305,6 +494474,13 @@
|
|||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"scroll-timeline-cssom.tentative.html": [
|
||||
"36fcbf704bd9ef50e6449135abaed9b97f3e727a",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"current-time-nan.html": [
|
||||
|
@ -518748,10 +518924,12 @@
|
|||
]
|
||||
],
|
||||
"RTCRtpSender-replaceTrack.https.html": [
|
||||
"77b0fc9594c221d5f8f9fe68950940e992982e99",
|
||||
"a370b6c059a52479cdb62a52adf1e4ab5a5f6b77",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
{
|
||||
"timeout": "long"
|
||||
}
|
||||
]
|
||||
],
|
||||
"RTCRtpSender-setParameters.html": [
|
||||
|
@ -518806,7 +518984,7 @@
|
|||
]
|
||||
],
|
||||
"RTCRtpTransceiver.https.html": [
|
||||
"9767417bf376db74903448b703fb3894a82078ff",
|
||||
"487774982298376b7ce27a2cbfaea7ad3c716e28",
|
||||
[
|
||||
null,
|
||||
{
|
||||
|
@ -525509,6 +525687,22 @@
|
|||
]
|
||||
]
|
||||
},
|
||||
"window-segments": {
|
||||
"getWindowSegments-iframes.tentative.sub.html": [
|
||||
"188a1180c0248a7ee236614efda91d669fd30fec",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"getWindowSegments.https.tentative.html": [
|
||||
"e3821bda40d3ab10c8e7ebf00d47934abca4b168",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
]
|
||||
},
|
||||
"workers": {
|
||||
"SharedWorker-MessageEvent-source.any.js": [
|
||||
"faf48cf9386bfd64030c94041f35f0823aaef79c",
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[floats-clear-multicol-000.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[floats-clear-multicol-001.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[floats-clear-multicol-balancing-000.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[floats-clear-multicol-balancing-001.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-002.html]
|
||||
[Hit test float]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[hit-test-floats-004.html]
|
||||
[Miss float below something else]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[hit-test-floats-005.html]
|
||||
[Miss clipped float]
|
||||
expected: FAIL
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
[trailing-other-space-separators-break-spaces-008.html]
|
||||
expected: FAIL
|
|
@ -8,6 +8,3 @@
|
|||
[throws if handleEvent is thruthy and not callable]
|
||||
expected: FAIL
|
||||
|
||||
[doesn't look up handleEvent method on callable event listeners]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[elementFromPoint-float-in-table.html]
|
||||
[float-in-div]
|
||||
expected: FAIL
|
||||
|
|
@ -2,3 +2,6 @@
|
|||
[elementsFromPoint on the root document for points in iframe elements]
|
||||
expected: FAIL
|
||||
|
||||
[elementsFromPoint on inner documents]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[elementsFromPoint-invalid-cases.html]
|
||||
[The root element is the last element returned for otherwise empty queries within the viewport]
|
||||
expected: FAIL
|
||||
|
|
@ -312,12 +312,6 @@
|
|||
[fetch(): separate response Content-Type: text/plain ]
|
||||
expected: NOTRUN
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -327,12 +321,18 @@
|
|||
[<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: combined response Content-Type: text/html */*]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html;" text/plain]
|
||||
expected: FAIL
|
||||
|
||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -11,6 +11,6 @@
|
|||
[X-Content-Type-Options%3A%20nosniff%2C%2C%40%23%24%23%25%25%26%5E%26%5E*()()11!]
|
||||
expected: FAIL
|
||||
|
||||
[X-Content-Type-Options%3A%20%40%23%24%23%25%25%26%5E%26%5E*()()11!%2Cnosniff]
|
||||
[X-Content-Type-Options%3A%20'NosniFF']
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_2.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
[embedded-opener-remove-frame.html]
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[opener and "removed" embedded documents]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -7,5 +7,5 @@
|
|||
expected: FAIL
|
||||
|
||||
[opener of discarded auxiliary browsing context]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[supported-elements.html]
|
||||
expected: TIMEOUT
|
||||
[Contenteditable element should support autofocus]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -9,7 +10,7 @@
|
|||
expected: FAIL
|
||||
|
||||
[Area element should support autofocus]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
[Host element with delegatesFocus should support autofocus]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[iframe_sandbox_popups_escaping-2.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[iframe_sandbox_popups_nonescaping-1.html]
|
||||
type: testharness
|
||||
expected: CRASH
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: FAIL
|
||||
expected: NOTRUN
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
[iframe_sandbox_popups_nonescaping-3.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[Check that popups from a sandboxed iframe do not escape the sandbox]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
[inserted-or-removed.html]
|
||||
[The last selected OPTION should win; Inserted by parser]
|
||||
expected: FAIL
|
||||
|
||||
[The last selected OPTION should win; Inserted by DOM API]
|
||||
expected: FAIL
|
||||
|
||||
[The last selected OPTION should win; Inserted by innerHTML]
|
||||
expected: FAIL
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
[ignore-opens-during-unload.window.html]
|
||||
expected: TIMEOUT
|
||||
expected: CRASH
|
||||
[ignore-opens-during-unload]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -4,3 +4,6 @@
|
|||
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: TIMEOUT
|
||||
|
||||
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
[017.html]
|
||||
expected: TIMEOUT
|
||||
[origin of the script that invoked the method, about:blank]
|
||||
expected: TIMEOUT
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
[003.html]
|
||||
type: testharness
|
||||
expected: ERROR
|
||||
[shared]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
[shared-worker-in-data-url-context.window.html]
|
||||
expected: TIMEOUT
|
||||
[Create a shared worker in a data url frame]
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
||||
[Create a data url shared worker in a data url frame]
|
||||
expected: NOTRUN
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
async_test(t => {
|
||||
const blob = new Blob(
|
||||
[
|
||||
`aaa\u001B$@<textarea>\u001B(B<script>/* xss */<\/script></textarea>bbb`
|
||||
],
|
||||
{type: 'text/html;charset=utf-8'});
|
||||
const url = URL.createObjectURL(blob);
|
||||
const win = window.open(url);
|
||||
t.add_cleanup(() => win.close());
|
||||
|
||||
win.onload = t.step_func_done(() => {
|
||||
assert_equals(win.document.charset, 'UTF-8');
|
||||
});
|
||||
}, 'Blob charset should override any auto-detected charset.');
|
||||
|
||||
async_test(t => {
|
||||
const blob = new Blob(
|
||||
[`<!doctype html>\n<meta charset="ISO-8859-1">`],
|
||||
{type: 'text/html;charset=utf-8'});
|
||||
const url = URL.createObjectURL(blob);
|
||||
const win = window.open(url);
|
||||
t.add_cleanup(() => win.close());
|
||||
|
||||
win.onload = t.step_func_done(() => {
|
||||
assert_equals(win.document.charset, 'UTF-8');
|
||||
});
|
||||
}, 'Blob charset should override <meta charset>.');
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html>
|
||||
<title>Verifies changing 'display' with a fixed position webkit-box that
|
||||
has a fixed position child</title>
|
||||
<body>
|
||||
<div id="outer" style="position:fixed;">
|
||||
<div style="display:-webkit-box; float:left; padding-left:100%;">
|
||||
<div style="position:fixed; width:100px; height:100px;"></div>
|
||||
</div>
|
||||
<div style="display:inline-block; width:100px; height:20px;"></div>
|
||||
</div>
|
||||
<div id="elm"></div>
|
||||
A
|
||||
</body>
|
||||
<script>
|
||||
document.body.offsetTop;
|
||||
elm.style.display = 'none';
|
||||
</script>
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<title>CSS Float Test Reference: Test the clear position after the floating elements breaking across multi-columns</title>
|
||||
<link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact"/>
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
|
||||
<style type="text/css">
|
||||
.multicol {
|
||||
margin: 1em;
|
||||
border: solid silver;
|
||||
width: 300px;
|
||||
column-width: 100px;
|
||||
column-gap: 0;
|
||||
column-fill: auto;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.container {
|
||||
border: 15px aqua;
|
||||
border-style: none solid;
|
||||
height: 250px;
|
||||
}
|
||||
.clear {
|
||||
border-bottom: solid orange;
|
||||
background: red;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>The orange line should be halfway down the third column
|
||||
(immediately after the end of the aqua lines).
|
||||
|
||||
<div class="multicol">
|
||||
<div class="container">
|
||||
</div>
|
||||
<div class="clear">
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,51 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<title>CSS Float Test: Test the clear position after the floating elements breaking across multi-columns</title>
|
||||
<link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact"/>
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css2/visuren.html#flow-control">
|
||||
<link rel="match" href="floats-clear-multicol-000-ref.html">
|
||||
|
||||
<style type="text/css">
|
||||
.multicol {
|
||||
margin: 1em;
|
||||
border: solid silver;
|
||||
width: 300px;
|
||||
column-width: 100px;
|
||||
column-gap: 0;
|
||||
column-fill: auto;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.float {
|
||||
float: right;
|
||||
width: 15px;
|
||||
background: aqua;
|
||||
height: 250px;
|
||||
}
|
||||
.L {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
background: red;
|
||||
}
|
||||
|
||||
.clear {
|
||||
border-bottom: solid orange;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>The orange line should be halfway down the third column
|
||||
(immediately after the end of the aqua lines).
|
||||
|
||||
<div class="multicol">
|
||||
<div class="container">
|
||||
<div class="float L"></div>
|
||||
<div class="float R"></div>
|
||||
</div>
|
||||
<div class="clear">
|
||||
<br clear="all">
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,51 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<title>CSS Float Test: Test the clear position after the floating elements breaking across multi-columns</title>
|
||||
<link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact"/>
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css2/visuren.html#flow-control">
|
||||
<link rel="match" href="floats-clear-multicol-000-ref.html">
|
||||
|
||||
<style type="text/css">
|
||||
.multicol {
|
||||
margin: 1em;
|
||||
border: solid silver;
|
||||
width: 300px;
|
||||
column-width: 100px;
|
||||
column-gap: 0;
|
||||
column-fill: auto;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.float {
|
||||
float: right;
|
||||
width: 15px;
|
||||
background: aqua;
|
||||
height: 250px;
|
||||
}
|
||||
.L {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.clear {
|
||||
border-bottom: solid orange;
|
||||
background: red;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>The orange line should be halfway down the third column
|
||||
(immediately after the end of the aqua lines).
|
||||
|
||||
<div class="multicol">
|
||||
<div class="container">
|
||||
<div class="float L"></div>
|
||||
<div class="float R"></div>
|
||||
<br clear="all">
|
||||
</div>
|
||||
<div class="clear">
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,51 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<title>CSS Float Test: Test the clear position after the floating elements breaking across multi-columns</title>
|
||||
<link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact"/>
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css2/visuren.html#flow-control">
|
||||
<link rel="match" href="floats-clear-multicol-000-ref.html">
|
||||
|
||||
<style type="text/css">
|
||||
.multicol {
|
||||
margin: 1em;
|
||||
border: solid silver;
|
||||
width: 300px;
|
||||
column-width: 100px;
|
||||
column-gap: 0;
|
||||
column-fill: auto;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.float {
|
||||
float: right;
|
||||
width: 15px;
|
||||
background: aqua;
|
||||
height: 250px;
|
||||
}
|
||||
.L {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
background: red;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: left;
|
||||
border-bottom: solid orange;
|
||||
background: red;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>The orange line should be halfway down the third column
|
||||
(immediately after the end of the aqua lines).
|
||||
|
||||
<div class="multicol">
|
||||
<div class="container">
|
||||
<div class="float L"></div>
|
||||
<div class="float R"></div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
|
@ -0,0 +1,60 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<title>CSS Float Test: Test the clear position after the floating elements breaking across multi-columns</title>
|
||||
<link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact"/>
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css2/visuren.html#flow-control">
|
||||
<link rel="match" href="floats-clear-multicol-000-ref.html">
|
||||
|
||||
<style type="text/css">
|
||||
.multicol {
|
||||
margin: 1em;
|
||||
border: solid silver;
|
||||
width: 300px;
|
||||
column-width: 100px;
|
||||
column-gap: 0;
|
||||
column-fill: auto;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.step {
|
||||
height: 10px;
|
||||
border: 15px aqua;
|
||||
border-style: none solid;
|
||||
}
|
||||
.float {
|
||||
float: right;
|
||||
width: 15px;
|
||||
background: aqua;
|
||||
height: 240px;
|
||||
}
|
||||
.L {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
background: red;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: left;
|
||||
height: 0;
|
||||
background: red;
|
||||
}
|
||||
.bar {
|
||||
border-bottom: orange solid;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>The orange line should be halfway down the third column
|
||||
(immediately after the end of the aqua lines).
|
||||
|
||||
<div class="multicol">
|
||||
<div class="step"></div>
|
||||
<div class="container">
|
||||
<div class="float L"></div>
|
||||
<div class="float R"></div>
|
||||
</div>
|
||||
<div class="clear"><div class="bar"></div></div>
|
||||
</div>
|
|
@ -0,0 +1,36 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<title>CSS Float Test Reference: Test the clear position after the floating elements breaking across multi-columns</title>
|
||||
<link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact"/>
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
|
||||
<style type="text/css">
|
||||
.multicol {
|
||||
margin: 1em;
|
||||
border: solid silver;
|
||||
width: 300px;
|
||||
column-width: 100px;
|
||||
column-gap: 0;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.container {
|
||||
border: 15px aqua;
|
||||
border-style: none solid;
|
||||
height: 250px;
|
||||
}
|
||||
.clear {
|
||||
border-bottom: solid orange;
|
||||
background: red;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>The orange line should be in the third column
|
||||
(immediately after the end of the aqua lines).
|
||||
|
||||
<div class="multicol">
|
||||
<div class="container">
|
||||
</div>
|
||||
<div class="clear">
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,50 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<title>CSS Float Test: Test the clear position after the floating elements breaking across multi-columns</title>
|
||||
<link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact"/>
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css2/visuren.html#flow-control">
|
||||
<link rel="match" href="floats-clear-multicol-balancing-000-ref.html">
|
||||
|
||||
<style type="text/css">
|
||||
.multicol {
|
||||
margin: 1em;
|
||||
border: solid silver;
|
||||
width: 300px;
|
||||
column-width: 100px;
|
||||
column-gap: 0;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.float {
|
||||
float: right;
|
||||
width: 15px;
|
||||
background: aqua;
|
||||
height: 250px;
|
||||
}
|
||||
.L {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
background: red;
|
||||
}
|
||||
|
||||
.clear {
|
||||
border-bottom: solid orange;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>The orange line should be in the third column
|
||||
(immediately after the end of the aqua lines).
|
||||
|
||||
<div class="multicol">
|
||||
<div class="container">
|
||||
<div class="float L"></div>
|
||||
<div class="float R"></div>
|
||||
</div>
|
||||
<div class="clear">
|
||||
<br clear="all">
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,50 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<title>CSS Float Test: Test the clear position after the floating elements breaking across multi-columns</title>
|
||||
<link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact"/>
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css2/visuren.html#flow-control">
|
||||
<link rel="match" href="floats-clear-multicol-balancing-000-ref.html">
|
||||
|
||||
<style type="text/css">
|
||||
.multicol {
|
||||
margin: 1em;
|
||||
border: solid silver;
|
||||
width: 300px;
|
||||
column-width: 100px;
|
||||
column-gap: 0;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.float {
|
||||
float: right;
|
||||
width: 15px;
|
||||
background: aqua;
|
||||
height: 250px;
|
||||
}
|
||||
.L {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.clear {
|
||||
border-bottom: solid orange;
|
||||
background: red;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>The orange line should be in the third column
|
||||
(immediately after the end of the aqua lines).
|
||||
|
||||
<div class="multicol">
|
||||
<div class="container">
|
||||
<div class="float L"></div>
|
||||
<div class="float R"></div>
|
||||
<br clear="all">
|
||||
</div>
|
||||
<div class="clear">
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,50 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<title>CSS Float Test: Test the clear position after the floating elements breaking across multi-columns</title>
|
||||
<link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact"/>
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css2/visuren.html#flow-control">
|
||||
<link rel="match" href="floats-clear-multicol-balancing-000-ref.html">
|
||||
|
||||
<style type="text/css">
|
||||
.multicol {
|
||||
margin: 1em;
|
||||
border: solid silver;
|
||||
width: 300px;
|
||||
column-width: 100px;
|
||||
column-gap: 0;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.float {
|
||||
float: right;
|
||||
width: 15px;
|
||||
background: aqua;
|
||||
height: 250px;
|
||||
}
|
||||
.L {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
background: red;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: left;
|
||||
border-bottom: solid orange;
|
||||
background: red;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>The orange line should be in the third column
|
||||
(immediately after the end of the aqua lines).
|
||||
|
||||
<div class="multicol">
|
||||
<div class="container">
|
||||
<div class="float L"></div>
|
||||
<div class="float R"></div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
|
@ -0,0 +1,59 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||
<title>CSS Float Test: Test the clear position after the floating elements breaking across multi-columns</title>
|
||||
<link rel="author" title="Elika J. Etemad" href="http://fantasai.inkedblade.net/contact"/>
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css2/visuren.html#flow-control">
|
||||
<link rel="match" href="floats-clear-multicol-balancing-000-ref.html">
|
||||
|
||||
<style type="text/css">
|
||||
.multicol {
|
||||
margin: 1em;
|
||||
border: solid silver;
|
||||
width: 300px;
|
||||
column-width: 100px;
|
||||
column-gap: 0;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.step {
|
||||
height: 10px;
|
||||
border: 15px aqua;
|
||||
border-style: none solid;
|
||||
}
|
||||
.float {
|
||||
float: right;
|
||||
width: 15px;
|
||||
background: aqua;
|
||||
height: 240px;
|
||||
}
|
||||
.L {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
background: red;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: left;
|
||||
height: 0;
|
||||
background: red;
|
||||
}
|
||||
.bar {
|
||||
border-bottom: orange solid;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>The orange line should be in the third column
|
||||
(immediately after the end of the aqua lines).
|
||||
|
||||
<div class="multicol">
|
||||
<div class="step"></div>
|
||||
<div class="container">
|
||||
<div class="float L"></div>
|
||||
<div class="float R"></div>
|
||||
</div>
|
||||
<div class="clear"><div class="bar"></div></div>
|
||||
</div>
|
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<meta charset="utf-8">
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-multicol-1/#column-span">
|
||||
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4689">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||
<meta name="assert" content="This test verifies columns are always balancing before column-spanning element in an unconstrained height and column-fill:auto column container.">
|
||||
|
||||
<style>
|
||||
.columns {
|
||||
column-fill: auto;
|
||||
column-count: 2;
|
||||
column-gap: 0;
|
||||
width: 100px;
|
||||
background: red;
|
||||
}
|
||||
.colspan {
|
||||
column-span: all;
|
||||
}
|
||||
.content {
|
||||
height: 200px;
|
||||
background: green;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<div class="columns">
|
||||
<div class="content"></div>
|
||||
<div class="colspan"></div>
|
||||
</div>
|
||||
</html>
|
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<meta charset="utf-8">
|
||||
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
|
||||
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
|
||||
<link rel="help" href="https://drafts.csswg.org/css-multicol-1/#column-span">
|
||||
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4689">
|
||||
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||
<meta name="assert" content="This test verifies columns are not balancing after a column-spanning element in a fixed height and column-fill:auto column container.">
|
||||
|
||||
<style>
|
||||
.columns {
|
||||
column-fill: auto;
|
||||
column-count: 2;
|
||||
column-gap: 0;
|
||||
width: 200px;
|
||||
height: 100px;
|
||||
}
|
||||
.colspan {
|
||||
column-span: all;
|
||||
}
|
||||
.content {
|
||||
height: 100px;
|
||||
background: green;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||
<div class="columns">
|
||||
<div class="colspan"></div>
|
||||
<div class="content"></div>
|
||||
</div>
|
||||
</html>
|
|
@ -0,0 +1,60 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#floats" />
|
||||
<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-document-elementfrompoint" />
|
||||
<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<style>
|
||||
.outer {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background: green;
|
||||
}
|
||||
.inner {
|
||||
float: left;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
background: blue;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id="log"></div>
|
||||
|
||||
<div class="outer" onclick="clicked('outer')">
|
||||
<div id="float-in-div" class="inner" onclick="clicked('inner')">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="outer" onclick="clicked('outer')">
|
||||
<div id='float-in-table' class="inner" onclick="clicked('inner')">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<pre id="output"></pre>
|
||||
<script>
|
||||
function clicked(p) {
|
||||
output.textContent += 'clicked ' + p + '\n';
|
||||
}
|
||||
|
||||
function testElementFromPoint(element) {
|
||||
let bounds = element.getBoundingClientRect();
|
||||
let result = document.elementFromPoint(bounds.x + 1, bounds.y + 1);
|
||||
assert_equals(result, element);
|
||||
}
|
||||
|
||||
let targets = [
|
||||
'float-in-div',
|
||||
'float-in-table',
|
||||
];
|
||||
for (let target of targets) {
|
||||
let element = document.getElementById(target);
|
||||
test(() => { testElementFromPoint(element); }, target);
|
||||
}
|
||||
</script>
|
||||
</body>
|
|
@ -1,32 +1,31 @@
|
|||
from datetime import datetime
|
||||
from six import ensure_str
|
||||
|
||||
def main(request, response):
|
||||
last_event_id = ensure_str(request.headers.get("Last-Event-Id", ""))
|
||||
ident = request.GET.first('ident', "test")
|
||||
cookie = "COOKIE" if ident in request.cookies else "NO_COOKIE"
|
||||
origin = request.GET.first('origin', request.headers["origin"])
|
||||
credentials = request.GET.first('credentials', 'true')
|
||||
last_event_id = request.headers.get(b"Last-Event-Id", b"")
|
||||
ident = request.GET.first(b'ident', b"test")
|
||||
cookie = b"COOKIE" if ident in request.cookies else b"NO_COOKIE"
|
||||
origin = request.GET.first(b'origin', request.headers[b"origin"])
|
||||
credentials = request.GET.first(b'credentials', b'true')
|
||||
|
||||
headers = []
|
||||
|
||||
if origin != 'none':
|
||||
headers.append(("Access-Control-Allow-Origin", origin));
|
||||
if origin != b'none':
|
||||
headers.append((b"Access-Control-Allow-Origin", origin));
|
||||
|
||||
if credentials != 'none':
|
||||
headers.append(("Access-Control-Allow-Credentials", credentials));
|
||||
if credentials != b'none':
|
||||
headers.append((b"Access-Control-Allow-Credentials", credentials));
|
||||
|
||||
if last_event_id == '':
|
||||
headers.append(("Content-Type", "text/event-stream"))
|
||||
response.set_cookie(ident, "COOKIE")
|
||||
data = "id: 1\nretry: 200\ndata: first %s\n\n" % cookie
|
||||
elif last_event_id == '1':
|
||||
headers.append(("Content-Type", "text/event-stream"))
|
||||
if last_event_id == b'':
|
||||
headers.append((b"Content-Type", b"text/event-stream"))
|
||||
response.set_cookie(ident, b"COOKIE")
|
||||
data = b"id: 1\nretry: 200\ndata: first %s\n\n" % cookie
|
||||
elif last_event_id == b'1':
|
||||
headers.append((b"Content-Type", b"text/event-stream"))
|
||||
long_long_time_ago = datetime.now().replace(year=2001, month=7, day=27)
|
||||
response.set_cookie(ident, "COOKIE", expires=long_long_time_ago)
|
||||
data = "id: 2\ndata: second %s\n\n" % cookie
|
||||
response.set_cookie(ident, b"COOKIE", expires=long_long_time_ago)
|
||||
data = b"id: 2\ndata: second %s\n\n" % cookie
|
||||
else:
|
||||
headers.append(("Content-Type", "stop"))
|
||||
data = "data: " + last_event_id + cookie + "\n\n";
|
||||
headers.append((b"Content-Type", b"stop"))
|
||||
data = b"data: " + last_event_id + cookie + b"\n\n";
|
||||
|
||||
return headers, data
|
||||
|
|
|
@ -1,34 +1,36 @@
|
|||
import os
|
||||
from wptserve import pipes
|
||||
|
||||
from wptserve.utils import isomorphic_decode
|
||||
|
||||
def run_other(request, response, path):
|
||||
#This is a terrible hack
|
||||
environ = {"__file__": path}
|
||||
exec(compile(open(path, "r").read(), path, 'exec'), environ, environ)
|
||||
rv = environ["main"](request, response)
|
||||
environ = {u"__file__": path}
|
||||
exec(compile(open(path, u"r").read(), path, u'exec'), environ, environ)
|
||||
rv = environ[u"main"](request, response)
|
||||
return rv
|
||||
|
||||
def main(request, response):
|
||||
origin = request.GET.first("origin", request.headers["origin"])
|
||||
credentials = request.GET.first("credentials", "true")
|
||||
origin = request.GET.first(b"origin", request.headers[b"origin"])
|
||||
credentials = request.GET.first(b"credentials", b"true")
|
||||
|
||||
response.headers.update([("Access-Control-Allow-Origin", origin),
|
||||
("Access-Control-Allow-Credentials", credentials)])
|
||||
response.headers.update([(b"Access-Control-Allow-Origin", origin),
|
||||
(b"Access-Control-Allow-Credentials", credentials)])
|
||||
|
||||
handler = request.GET.first('run')
|
||||
if handler in ["status-reconnect",
|
||||
"message",
|
||||
"redirect",
|
||||
"cache-control"]:
|
||||
if handler == "cache-control":
|
||||
response.headers.set("Content-Type", "text/event-stream")
|
||||
rv = open(os.path.join(request.doc_root, "eventsource", "resources", "cache-control.event_stream"), "r").read()
|
||||
handler = request.GET.first(b'run')
|
||||
if handler in [b"status-reconnect",
|
||||
b"message",
|
||||
b"redirect",
|
||||
b"cache-control"]:
|
||||
if handler == b"cache-control":
|
||||
response.headers.set(b"Content-Type", b"text/event-stream")
|
||||
rv = open(os.path.join(request.doc_root, u"eventsource", u"resources", u"cache-control.event_stream"), u"r").read()
|
||||
response.content = rv
|
||||
pipes.sub(request, response)
|
||||
return
|
||||
elif handler == "redirect":
|
||||
return run_other(request, response, os.path.join(request.doc_root, "common", "redirect.py"))
|
||||
elif handler == b"redirect":
|
||||
return run_other(request, response, os.path.join(request.doc_root, u"common", u"redirect.py"))
|
||||
else:
|
||||
return run_other(request, response, os.path.join(os.path.split(__file__)[0], handler + ".py"))
|
||||
return run_other(request, response, os.path.join(os.path.split(isomorphic_decode(__file__))[0], isomorphic_decode(handler) + u".py"))
|
||||
else:
|
||||
return
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
from six import ensure_str
|
||||
|
||||
def main(request, response):
|
||||
response.headers.set("Content-Type", "text/event-stream")
|
||||
response.headers.set(b"Content-Type", b"text/event-stream")
|
||||
|
||||
last_event_id = ensure_str(request.headers.get("Last-Event-ID", ""))
|
||||
last_event_id = request.headers.get(b"Last-Event-ID", b"")
|
||||
if last_event_id:
|
||||
return "data: " + last_event_id + "\n\n"
|
||||
return b"data: " + last_event_id + b"\n\n"
|
||||
else:
|
||||
idvalue = request.GET.first("idvalue", u"\u2026")
|
||||
return "id: " + idvalue + "\nretry: 200\ndata: hello\n\n"
|
||||
idvalue = request.GET.first(b"idvalue", u"\u2026".encode("utf-8"))
|
||||
return b"id: " + idvalue + b"\nretry: 200\ndata: hello\n\n"
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
import time
|
||||
|
||||
def main(request, response):
|
||||
mime = request.GET.first("mime", "text/event-stream")
|
||||
message = request.GET.first("message", "data: data");
|
||||
newline = "" if request.GET.first("newline", None) == "none" else "\n\n";
|
||||
sleep = int(request.GET.first("sleep", "0"))
|
||||
mime = request.GET.first(b"mime", b"text/event-stream")
|
||||
message = request.GET.first(b"message", b"data: data");
|
||||
newline = b"" if request.GET.first(b"newline", None) == b"none" else b"\n\n";
|
||||
sleep = int(request.GET.first(b"sleep", b"0"))
|
||||
|
||||
headers = [("Content-Type", mime)]
|
||||
body = message + newline + "\n"
|
||||
headers = [(b"Content-Type", mime)]
|
||||
body = message + newline + b"\n"
|
||||
if sleep != 0:
|
||||
time.sleep(sleep/1000)
|
||||
|
||||
|
|
|
@ -1,35 +1,35 @@
|
|||
import time
|
||||
|
||||
def main(request, response):
|
||||
response.headers.set('Content-Type', 'text/event-stream')
|
||||
response.headers.set('Cache-Control', 'no-cache')
|
||||
response.headers.set(b'Content-Type', b'text/event-stream')
|
||||
response.headers.set(b'Cache-Control', b'no-cache')
|
||||
|
||||
response.explicit_flush = True
|
||||
response.write_status_headers()
|
||||
|
||||
while True:
|
||||
response.writer.write("data:msg")
|
||||
response.writer.write("\n")
|
||||
response.writer.write("data: msg")
|
||||
response.writer.write("\n\n")
|
||||
response.writer.write(u"data:msg")
|
||||
response.writer.write(u"\n")
|
||||
response.writer.write(u"data: msg")
|
||||
response.writer.write(u"\n\n")
|
||||
|
||||
response.writer.write(":")
|
||||
response.writer.write("\n")
|
||||
response.writer.write(u":")
|
||||
response.writer.write(u"\n")
|
||||
|
||||
response.writer.write("falsefield:msg")
|
||||
response.writer.write("\n\n")
|
||||
response.writer.write(u"falsefield:msg")
|
||||
response.writer.write(u"\n\n")
|
||||
|
||||
response.writer.write("falsefield:msg")
|
||||
response.writer.write("\n")
|
||||
response.writer.write(u"falsefield:msg")
|
||||
response.writer.write(u"\n")
|
||||
|
||||
response.writer.write("Data:data")
|
||||
response.writer.write("\n\n")
|
||||
response.writer.write(u"Data:data")
|
||||
response.writer.write(u"\n\n")
|
||||
|
||||
response.writer.write("data")
|
||||
response.writer.write("\n\n")
|
||||
response.writer.write(u"data")
|
||||
response.writer.write(u"\n\n")
|
||||
|
||||
response.writer.write("data:end")
|
||||
response.writer.write("\n\n")
|
||||
response.writer.write(u"data:end")
|
||||
response.writer.write(u"\n\n")
|
||||
|
||||
response.writer.flush()
|
||||
time.sleep(2)
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
def main(request, response):
|
||||
name = "recon_fail_" + request.GET.first("id")
|
||||
name = b"recon_fail_" + request.GET.first(b"id")
|
||||
|
||||
headers = [("Content-Type", "text/event-stream")]
|
||||
headers = [(b"Content-Type", b"text/event-stream")]
|
||||
cookie = request.cookies.first(name, None)
|
||||
state = cookie.value if cookie is not None else None
|
||||
|
||||
if state == 'opened':
|
||||
status = (200, "RECONNECT")
|
||||
response.set_cookie(name, "reconnected");
|
||||
body = "data: reconnected\n\n";
|
||||
if state == b'opened':
|
||||
status = (200, b"RECONNECT")
|
||||
response.set_cookie(name, b"reconnected");
|
||||
body = b"data: reconnected\n\n";
|
||||
|
||||
elif state == 'reconnected':
|
||||
status = (204, "NO CONTENT (CLOSE)")
|
||||
elif state == b'reconnected':
|
||||
status = (204, b"NO CONTENT (CLOSE)")
|
||||
response.delete_cookie(name);
|
||||
body = "data: closed\n\n" # Will never get through
|
||||
body = b"data: closed\n\n" # Will never get through
|
||||
|
||||
else:
|
||||
status = (200, "OPEN");
|
||||
response.set_cookie(name, "opened");
|
||||
body = "retry: 2\ndata: opened\n\n";
|
||||
status = (200, b"OPEN");
|
||||
response.set_cookie(name, b"opened");
|
||||
body = b"retry: 2\ndata: opened\n\n";
|
||||
|
||||
return status, headers, body
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
def main(request, response):
|
||||
status = (request.GET.first("status", "404"), "HAHAHAHA")
|
||||
headers = [("Content-Type", "text/event-stream")]
|
||||
status = (request.GET.first(b"status", b"404"), b"HAHAHAHA")
|
||||
headers = [(b"Content-Type", b"text/event-stream")]
|
||||
|
||||
# According to RFC7231, HTTP responses bearing status code 204 or 205 must
|
||||
# not specify a body. The expected browser behavior for this condition is not
|
||||
# currently defined--see the following for further discussion:
|
||||
#
|
||||
# https://github.com/web-platform-tests/wpt/pull/5227
|
||||
if status[0] in ["204", "205"]:
|
||||
body = ""
|
||||
if status[0] in [b"204", b"205"]:
|
||||
body = b""
|
||||
else:
|
||||
body = "data: data\n\n"
|
||||
body = b"data: data\n\n"
|
||||
|
||||
return status, headers, body
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
def main(request, response):
|
||||
status_code = request.GET.first("status", "204")
|
||||
name = request.GET.first("id", status_code)
|
||||
status_code = request.GET.first(b"status", b"204")
|
||||
name = request.GET.first(b"id", status_code)
|
||||
|
||||
headers = [("Content-Type", "text/event-stream")]
|
||||
headers = [(b"Content-Type", b"text/event-stream")]
|
||||
|
||||
cookie_name = "request" + name
|
||||
cookie_name = b"request" + name
|
||||
|
||||
if request.cookies.first(cookie_name, "") == status_code:
|
||||
if request.cookies.first(cookie_name, b"") == status_code:
|
||||
status = 200
|
||||
response.delete_cookie(cookie_name)
|
||||
body = "data: data\n\n"
|
||||
body = b"data: data\n\n"
|
||||
else:
|
||||
response.set_cookie(cookie_name, status_code);
|
||||
status = (int(status_code), "TEST")
|
||||
body = "retry: 2\n"
|
||||
if "ok_first" in request.GET:
|
||||
body += "data: ok\n\n"
|
||||
status = (int(status_code), b"TEST")
|
||||
body = b"retry: 2\n"
|
||||
if b"ok_first" in request.GET:
|
||||
body += b"data: ok\n\n"
|
||||
|
||||
return status, headers, body
|
||||
|
||||
|
|
|
@ -144,6 +144,7 @@ function forEachCanvasSource(crossOriginUrl, sameOriginUrl, callback) {
|
|||
return new Promise((resolve, reject) => {
|
||||
const video = document.createElement("video");
|
||||
video.oncanplaythrough = () => resolve(video);
|
||||
video.preload = "auto";
|
||||
video.onerror = reject;
|
||||
video.src = getVideoURI(crossOriginUrl + "/media/movie_300");
|
||||
});
|
||||
|
@ -156,6 +157,7 @@ function forEachCanvasSource(crossOriginUrl, sameOriginUrl, callback) {
|
|||
return new Promise((resolve, reject) => {
|
||||
const video = document.createElement("video");
|
||||
video.oncanplaythrough = () => resolve(video);
|
||||
video.preload = "auto";
|
||||
video.onerror = reject;
|
||||
video.src = "/common/redirect.py?location=" + getVideoURI(crossOriginUrl + "/media/movie_300");
|
||||
});
|
||||
|
@ -168,6 +170,7 @@ function forEachCanvasSource(crossOriginUrl, sameOriginUrl, callback) {
|
|||
return new Promise((resolve, reject) => {
|
||||
const video = document.createElement("video");
|
||||
video.oncanplaythrough = () => resolve(video);
|
||||
video.preload = "auto";
|
||||
video.onerror = reject;
|
||||
video.src = crossOriginUrl + "/common/redirect.py?location=" + getVideoURI(sameOriginUrl + "/media/movie_300");
|
||||
});
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="help" href="https://html.spec.whatwg.org/C/#the-select-element:nodes-are-inserted">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<body>
|
||||
|
||||
<select id="by-parser">
|
||||
<option selected>First</option>
|
||||
<option selected>Second</option>
|
||||
</select>
|
||||
|
||||
<select id="by-parser-optgroup">
|
||||
<optgroup>
|
||||
<option selected>First</option>
|
||||
<option selected>Second</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
|
||||
<select id="by-dom"></select>
|
||||
|
||||
<select id="by-innerHTML"></select>
|
||||
|
||||
<script>
|
||||
test(() => {
|
||||
const target = document.querySelector("#by-parser");
|
||||
assert_equals(target.selectedOptions[0].textContent, 'Second');
|
||||
|
||||
const target2 = document.querySelector("#by-parser-optgroup");
|
||||
assert_equals(target2.selectedOptions[0].textContent, 'Second');
|
||||
}, 'The last selected OPTION should win; Inserted by parser');
|
||||
|
||||
test(() => {
|
||||
const target = document.querySelector("#by-dom");
|
||||
const option1 = document.createElement('option');
|
||||
option1.defaultSelected = true;
|
||||
option1.textContent = 'First';
|
||||
const option2 = document.createElement('option');
|
||||
option2.defaultSelected = true;
|
||||
option2.textContent = 'Second';
|
||||
target.appendChild(option1);
|
||||
target.appendChild(option2);
|
||||
assert_equals(target.selectedOptions[0].textContent, 'Second');
|
||||
|
||||
target.innerHTML = '';
|
||||
const optgroup = document.createElement('optgroup');
|
||||
const option3 = document.createElement('option');
|
||||
option3.defaultSelected = true;
|
||||
option3.textContent = 'First';
|
||||
const option4 = document.createElement('option');
|
||||
option4.defaultSelected = true;
|
||||
option4.textContent = 'Second';
|
||||
optgroup.appendChild(option3);
|
||||
optgroup.appendChild(option4);
|
||||
target.appendChild(optgroup);
|
||||
assert_equals(target.selectedOptions[0].textContent, 'Second');
|
||||
}, 'The last selected OPTION should win; Inserted by DOM API');
|
||||
|
||||
test(() => {
|
||||
const target = document.querySelector("#by-innerHTML");
|
||||
target.innerHTML = '<option selected>First</option>' +
|
||||
'<option selected>Second</option>';
|
||||
assert_equals(target.selectedOptions[0].textContent, 'Second');
|
||||
|
||||
target.innerHTML = '<option selected>First</option>' +
|
||||
'<optgroup><option selected>Second</option>' +
|
||||
'<option selected>Third</option></optgroup>' +
|
||||
'<option selected>Fourth</option>';
|
||||
assert_equals(target.selectedOptions[0].textContent, 'Fourth');
|
||||
}, 'The last selected OPTION should win; Inserted by innerHTML');
|
||||
</script>
|
||||
</body>
|
|
@ -32,11 +32,11 @@ interface PictureInPictureWindow : EventTarget {
|
|||
};
|
||||
|
||||
[Exposed=Window]
|
||||
interface EnterPictureInPictureEvent : Event {
|
||||
constructor(DOMString type, EnterPictureInPictureEventInit eventInitDict);
|
||||
interface PictureInPictureEvent : Event {
|
||||
constructor(DOMString type, PictureInPictureEventInit eventInitDict);
|
||||
[SameObject] readonly attribute PictureInPictureWindow pictureInPictureWindow;
|
||||
};
|
||||
|
||||
dictionary EnterPictureInPictureEventInit : EventInit {
|
||||
dictionary PictureInPictureEventInit : EventInit {
|
||||
required PictureInPictureWindow pictureInPictureWindow;
|
||||
};
|
||||
|
|
|
@ -10,9 +10,16 @@
|
|||
<body></body>
|
||||
<script>
|
||||
promise_test(async t => {
|
||||
let pictureInPictureWindow;
|
||||
const video = await loadVideo();
|
||||
|
||||
video.addEventListener('enterpictureinpicture', t.step_func_done(event => {
|
||||
pictureInPictureWindow = event.pictureInPictureWindow;
|
||||
}));
|
||||
|
||||
video.addEventListener('leavepictureinpicture', t.step_func_done(event => {
|
||||
assert_equals(pictureInPictureWindow, event.pictureInPictureWindow);
|
||||
|
||||
assert_equals(event.target, video);
|
||||
assert_equals(event.bubbles, true);
|
||||
assert_equals(event.cancelable, false);
|
||||
|
@ -25,9 +32,15 @@ promise_test(async t => {
|
|||
}, 'leavepictureinpicture event is fired if document.exitPictureInPicture');
|
||||
|
||||
promise_test(async t => {
|
||||
let pictureInPictureWindow;
|
||||
const video = await loadVideo();
|
||||
|
||||
video.addEventListener('enterpictureinpicture', t.step_func_done(event => {
|
||||
pictureInPictureWindow = event.pictureInPictureWindow;
|
||||
}));
|
||||
|
||||
video.addEventListener('leavepictureinpicture', t.step_func_done(event => {
|
||||
assert_equals(pictureInPictureWindow, event.pictureInPictureWindow);
|
||||
assert_equals(event.target, video);
|
||||
assert_equals(event.bubbles, true);
|
||||
assert_equals(event.cancelable, false);
|
||||
|
|
|
@ -0,0 +1,184 @@
|
|||
<!DOCTYPE html>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/css/support/parsing-testcommon.js"></script>
|
||||
<div id="target"></div>
|
||||
<script>
|
||||
|
||||
// Runs a function while a stylesheet is temporarily inserted into the
|
||||
// document.
|
||||
function with_stylesheet(text, func) {
|
||||
let s = document.createElement('style');
|
||||
try {
|
||||
s.textContent = text;
|
||||
document.documentElement.append(s);
|
||||
func(s.sheet.rules);
|
||||
} finally {
|
||||
s.remove();
|
||||
}
|
||||
}
|
||||
|
||||
// Runs a test while a stylesheet is temporarily inserted into the
|
||||
// document.
|
||||
function test_stylesheet(text, func, description) {
|
||||
test(() => {
|
||||
with_stylesheet(text, func);
|
||||
}, description);
|
||||
}
|
||||
|
||||
function test_valid_rule(text, description) {
|
||||
test_stylesheet(text, (rules) => {
|
||||
assert_equals(rules.length, 1);
|
||||
assert_equals(rules[0].constructor.name, 'CSSScrollTimelineRule');
|
||||
}, description);
|
||||
}
|
||||
|
||||
function test_invalid_rule(text, description) {
|
||||
test_stylesheet(text, (rules) => {
|
||||
assert_equals(rules.length, 0);
|
||||
}, description);
|
||||
}
|
||||
|
||||
// Verify that for the _specifed_ value for a given _descriptor_, the _expected_
|
||||
// string can be observed via the equivalent attribute on CSSScrollTimelineRule.
|
||||
function test_descriptor(descriptor, specified, expected) {
|
||||
if (typeof(expected) == 'undefined')
|
||||
expected = specified;
|
||||
let attribute = descriptor.replaceAll(/\-./g, x => x[1].toUpperCase());
|
||||
test_stylesheet(`@scroll-timeline test { ${descriptor}:${specified}; }`, (rules) => {
|
||||
assert_equals(rules.length, 1);
|
||||
assert_equals(rules[0].constructor.name, 'CSSScrollTimelineRule');
|
||||
assert_equals(rules[0][attribute], expected);
|
||||
}, `CSSScrollTimelineRule.${attribute} ${specified}`);
|
||||
}
|
||||
|
||||
test_valid_rule('@scroll-timeline foo {}', 'Empty block');
|
||||
test_valid_rule('@scroll-timeline foo {', 'EOF ends block');
|
||||
test_valid_rule('@scroll-timeline "foo" {}', 'Timeline name can be a <string>');
|
||||
|
||||
test_invalid_rule('@scroll-timeline', 'Missing prelude');
|
||||
test_invalid_rule('@scroll-timeline foo', 'Missing block');
|
||||
test_invalid_rule('@scroll-timeline {}', 'Missing timeline name');
|
||||
test_invalid_rule('@scroll-timeline 123 {}', 'Timeline name must be an identifier');
|
||||
test_invalid_rule('@scroll-timeline none {}', 'Timeline name must match <custom-ident>');
|
||||
test_invalid_rule('@scroll-timeline NONE {}', 'Timeline name must match <custom-ident> (caps)');
|
||||
test_invalid_rule('@scroll-timeline NoNe {}', 'Timeline name must match <custom-ident> (mixed)');
|
||||
test_invalid_rule('@scroll-timeline initial {}', 'Timeline name may not be initial');
|
||||
test_invalid_rule('@scroll-timeline inherit {}', 'Timeline name may not be inherit');
|
||||
test_invalid_rule('@scroll-timeline unset {}', 'Timeline name may not be unset');
|
||||
test_invalid_rule('@scroll-timeline revert {}', 'Timeline name may not be revert');
|
||||
test_invalid_rule('@scroll-timeline default {}', 'Timeline name may not be default');
|
||||
test_invalid_rule('@scroll-timeline foo bar {}', 'Extra timeline name');
|
||||
|
||||
// CSSRule.type
|
||||
|
||||
test(() => {
|
||||
with_stylesheet(`@scroll-timeline valid { }`, (rules) => {
|
||||
assert_equals(rules.length, 1);
|
||||
let rule = rules[0];
|
||||
assert_equals(rule.constructor.name, 'CSSScrollTimelineRule');
|
||||
assert_equals(rule.type, 0);
|
||||
});
|
||||
}, 'CSSRule.type returns 0');
|
||||
|
||||
// CSSScrollTimelineRule.name
|
||||
|
||||
function test_name(specified, expected) {
|
||||
if (typeof(expected) == 'undefined')
|
||||
expected = specified;
|
||||
test_stylesheet(`@scroll-timeline ${specified} { }`, (rules) => {
|
||||
assert_equals(rules.length, 1);
|
||||
assert_equals(rules[0].constructor.name, 'CSSScrollTimelineRule');
|
||||
assert_equals(rules[0].name, expected);
|
||||
}, `CSSScrollTimelineRule.name ${specified}`);
|
||||
}
|
||||
|
||||
test_name('foo');
|
||||
test_name('Foo');
|
||||
test_name('f___123');
|
||||
test_name('a\\9 b', 'a\tb'); // U+0009 CHARACTER TABULATION
|
||||
test_name('"foo"', 'foo');
|
||||
test_name('"none"', 'none');
|
||||
|
||||
// CSSScrollTimelineRule.source
|
||||
|
||||
function test_source(specified, expected) {
|
||||
test_descriptor('source', specified, expected);
|
||||
}
|
||||
|
||||
test_source('selector(#foo)');
|
||||
test_source('selector( #foo )', 'selector(#foo)');
|
||||
test_source(' selector(#foo) ', 'selector(#foo)');
|
||||
test_source('none');
|
||||
test_source(' none ', 'none');
|
||||
test_source('selector(#a\\9 b)');
|
||||
|
||||
test_source('#foo', 'none');
|
||||
test_source('', 'none');
|
||||
test_source('element(#foo)', 'none');
|
||||
test_source('selector(#foo more)', 'none');
|
||||
test_source('selector(html)', 'none');
|
||||
test_source('selector(foo)', 'none');
|
||||
test_source('selector(:before)', 'none');
|
||||
test_source('selector(*)', 'none');
|
||||
test_source('selector(.a)', 'none');
|
||||
test_source('selector(.a, .b)', 'none');
|
||||
|
||||
// CSSScrollTimelineRule.orientation
|
||||
|
||||
function test_orientation(specified, expected) {
|
||||
test_descriptor('orientation', specified, expected);
|
||||
}
|
||||
|
||||
test_orientation('auto');
|
||||
test_orientation('block');
|
||||
test_orientation('inline');
|
||||
test_orientation('horizontal');
|
||||
test_orientation('vertical');
|
||||
test_orientation(' vertical ', 'vertical');
|
||||
|
||||
test_orientation('', 'auto');
|
||||
test_orientation('foo', 'auto');
|
||||
test_orientation('10px', 'auto');
|
||||
test_orientation('red', 'auto');
|
||||
|
||||
// CSSScrollTimelineRule.start
|
||||
// CSSScrollTimelineRule.end
|
||||
|
||||
function test_offsets(specified, expected) {
|
||||
test_descriptor('start', specified, expected);
|
||||
test_descriptor('end', specified, expected);
|
||||
}
|
||||
|
||||
test_offsets('auto');
|
||||
test_offsets(' auto ', 'auto');
|
||||
test_offsets('10px',);
|
||||
test_offsets(' 10px ', '10px');
|
||||
test_offsets('10em');
|
||||
test_offsets('10%');
|
||||
test_offsets('calc(1px + 1%)');
|
||||
|
||||
test_offsets('', 'auto');
|
||||
test_offsets('red', 'auto');
|
||||
test_offsets('#fff', 'auto');
|
||||
test_offsets('unset', 'auto');
|
||||
test_offsets('selector(#foo)', 'auto');
|
||||
|
||||
// CSSScrollTimelineRule.timeRange
|
||||
|
||||
function test_scroll_time_range(specified, expected) {
|
||||
test_descriptor('time-range', specified, expected);
|
||||
}
|
||||
|
||||
test_scroll_time_range('auto');
|
||||
test_scroll_time_range(' auto ', 'auto');
|
||||
test_scroll_time_range('1s');
|
||||
test_scroll_time_range(' 1s ', '1s');
|
||||
test_scroll_time_range('1000ms');
|
||||
|
||||
test_scroll_time_range('', 'auto');
|
||||
test_scroll_time_range('red', 'auto');
|
||||
test_scroll_time_range('#fff', 'auto');
|
||||
test_scroll_time_range('unset', 'auto');
|
||||
|
||||
</script>
|
|
@ -1,2 +1,2 @@
|
|||
requests==2.23.0
|
||||
requests==2.24.0
|
||||
mozinfo==1.2.1 # https://bugzilla.mozilla.org/show_bug.cgi?id=1621226
|
||||
|
|
|
@ -5,5 +5,5 @@ mozdebug==0.2
|
|||
# Pillow 7 requires Python 3
|
||||
pillow==6.2.2 # pyup: <7.0
|
||||
urllib3[secure]==1.25.9
|
||||
requests==2.23.0
|
||||
requests==2.24.0
|
||||
six==1.15.0
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
mozprocess==1.0.0
|
||||
selenium==3.141.0
|
||||
requests==2.23.0
|
||||
requests==2.24.0
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<meta name="timeout" content="long">
|
||||
<title>RTCRtpSender.prototype.replaceTrack</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
|
|
|
@ -400,8 +400,9 @@
|
|||
const offer = await pc1.createOffer();
|
||||
await pc1.setLocalDescription(offer);
|
||||
// Remove track-id from msid
|
||||
offer.sdp = offer.sdp.replace(/(a=msid:[^ \t]+).*\r\n/g, "$1\r\n");
|
||||
assert_true(offer.sdp.includes(`a=msid:${stream.id}\r\n`));
|
||||
// Fixate stream-id so that error message is consistent.
|
||||
offer.sdp = offer.sdp.replace(/(a=msid:[^ \t]+).*\r\n/g,
|
||||
"a=msid:fake-stream-id\r\n");
|
||||
await pc2.setRemoteDescription(offer);
|
||||
const answer = await pc2.createAnswer();
|
||||
await pc1.setRemoteDescription(answer);
|
||||
|
@ -1146,10 +1147,16 @@
|
|||
|
||||
let gotUnmuteAudio2 = gotUnmuteEvent(pc2.getTransceivers()[0].receiver.track);
|
||||
let gotUnmuteVideo2 = gotUnmuteEvent(pc2.getTransceivers()[1].receiver.track);
|
||||
// Jump out before waiting if a track is unmuted before RTP starts flowing.
|
||||
assert_true(pc1.getTransceivers()[0].receiver.track.muted);
|
||||
assert_true(pc1.getTransceivers()[1].receiver.track.muted);
|
||||
assert_true(pc2.getTransceivers()[0].receiver.track.muted);
|
||||
assert_true(pc2.getTransceivers()[1].receiver.track.muted);
|
||||
|
||||
await iceConnected(pc1);
|
||||
await iceConnected(pc2);
|
||||
|
||||
|
||||
// Check that receive tracks are unmuted when RTP starts flowing
|
||||
await gotUnmuteAudio1;
|
||||
await gotUnmuteVideo1;
|
||||
|
|
|
@ -98,7 +98,7 @@ async function negotiateSimulcastAndWaitForVideo(t, rids, pc1, pc2, codec) {
|
|||
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
|
||||
const transceiver = pc1.addTransceiver(stream.getVideoTracks()[0], {
|
||||
streams: [stream],
|
||||
sendEncodings: rids.map(rid => {rid}),
|
||||
sendEncodings: rids.map(rid => ({rid})),
|
||||
});
|
||||
if (codec) {
|
||||
preferCodec(transceiver, codec.mimeType, codec.sdpFmtpLine);
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Window Segments: getWindowSegments() tentative</title>
|
||||
<!-- TODO: update link to W3C whenever specifications are ready -->
|
||||
<link rel="help" href="https://github.com/webscreens/window-segments/"/>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<style>
|
||||
iframe { zoom: 2; }
|
||||
</style>
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
async_test((t) => {
|
||||
let segments = window.getWindowSegments();
|
||||
let responses = 0;
|
||||
window.addEventListener("message", t.step_func((evt) => {
|
||||
let desc = "Window segments of child frame for: " + evt.data.domain;
|
||||
assert_equals(evt.data.length, segments.length,
|
||||
desc + " must match in length.");
|
||||
assert_equals(evt.data.x, segments[0].x, desc + " must match for x.");
|
||||
assert_equals(evt.data.y, segments[0].y, desc + " must match for x.");
|
||||
assert_equals(evt.data.width, segments[0].width,
|
||||
desc + " must match for x.");
|
||||
assert_equals(evt.data.height, segments[0].height,
|
||||
desc + " must match for x.");
|
||||
|
||||
responses++;
|
||||
if (responses == 2) {
|
||||
t.done();
|
||||
}
|
||||
}));
|
||||
}, "Window segments of child frames (same or different domain) must match those of the main frame.");
|
||||
</script>
|
||||
|
||||
|
||||
<iframe src="http://{{domains[www1]}}:{{ports[http][0]}}/window-segments/post-window-segments-sub-frame.html"></iframe>
|
||||
<iframe src="post-window-segments-sub-frame.html"></iframe>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Window Segments: getWindowSegments() tentative</title>
|
||||
<!-- TODO: update link to W3C whenever specifications are ready -->
|
||||
<link rel="help" href="https://github.com/webscreens/window-segments/"/>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
test(() => {
|
||||
let segments = window.getWindowSegments();
|
||||
assert_equals(segments.length, 1, "For a viewport not segmented, there must be a single window segment");
|
||||
let segment = segments[0];
|
||||
assert_equals(segment.x, 0, "A viewport with a single segment must have 0, 0 origin");
|
||||
assert_equals(segment.y, 0, "A viewport with a single segment must have 0, 0 origin");
|
||||
assert_equals(segment.width, window.innerWidth, "A viewport with a single segment must have a width in CSS pixels, matching window.innerWidth");
|
||||
assert_equals(segment.height, window.innerHeight, "A viewport with a single segment must have a height in CSS pixels, matching window.innerHeight");
|
||||
}, "getWindowSegments() returns a single segment, equal to the layout viewport dimesions");
|
||||
</script>
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
<script>
|
||||
let segments = getWindowSegments();
|
||||
|
||||
parent.postMessage({
|
||||
length: segments.length,
|
||||
x: segments[0].x,
|
||||
y: segments[0].y,
|
||||
width: segments[0].width,
|
||||
height: segments[0].height,
|
||||
domain: document.domain,
|
||||
}, "*");
|
||||
</script>
|
Loading…
Add table
Add a link
Reference in a new issue