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:
bors-servo 2020-06-19 20:29:05 -04:00 committed by GitHub
commit 0b61cfc3ae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
97 changed files with 1486 additions and 195 deletions

View file

@ -0,0 +1,2 @@
[floats-clear-multicol-000.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[floats-clear-multicol-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[floats-clear-multicol-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[floats-clear-multicol-003.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[floats-clear-multicol-balancing-000.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[floats-clear-multicol-balancing-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[floats-clear-multicol-balancing-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[floats-clear-multicol-balancing-003.html]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-004.html]
[Miss float below something else]
expected: FAIL

View file

@ -1,4 +0,0 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -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

View file

@ -0,0 +1,4 @@
[elementFromPoint-float-in-table.html]
[float-in-div]
expected: FAIL

View file

@ -2,3 +2,6 @@
[elementsFromPoint on the root document for points in iframe elements]
expected: FAIL
[elementsFromPoint on inner documents]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -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

View file

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

View file

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

View file

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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -1,5 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -1,5 +1,4 @@
[003.html]
expected: ERROR
[shared]
expected: FAIL

View file

@ -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

View file

@ -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",

View file

@ -0,0 +1,2 @@
[floats-clear-multicol-000.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[floats-clear-multicol-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[floats-clear-multicol-balancing-000.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[floats-clear-multicol-balancing-001.html]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-002.html]
[Hit test float]
expected: FAIL

View file

@ -0,0 +1,4 @@
[hit-test-floats-004.html]
[Miss float below something else]
expected: FAIL

View file

@ -1,4 +0,0 @@
[hit-test-floats-005.html]
[Miss clipped float]
expected: FAIL

View file

@ -1,2 +0,0 @@
[trailing-other-space-separators-break-spaces-008.html]
expected: FAIL

View file

@ -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

View file

@ -0,0 +1,4 @@
[elementFromPoint-float-in-table.html]
[float-in-div]
expected: FAIL

View file

@ -2,3 +2,6 @@
[elementsFromPoint on the root document for points in iframe elements]
expected: FAIL
[elementsFromPoint on inner documents]
expected: FAIL

View file

@ -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

View file

@ -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

View file

@ -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

View file

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

View file

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

View file

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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -1,5 +1,5 @@
[ignore-opens-during-unload.window.html]
expected: TIMEOUT
expected: CRASH
[ignore-opens-during-unload]
expected: FAIL

View file

@ -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

View file

@ -1,5 +0,0 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -1,6 +1,5 @@
[003.html]
type: testharness
expected: ERROR
[shared]
expected: FAIL

View file

@ -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

View file

@ -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>.');

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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

View file

@ -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

View file

@ -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"

View file

@ -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)

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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");
});

View file

@ -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>

View file

@ -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;
};

View file

@ -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);

View file

@ -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>

View file

@ -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

View file

@ -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

View file

@ -1,3 +1,3 @@
mozprocess==1.0.0
selenium==3.141.0
requests==2.23.0
requests==2.24.0

View file

@ -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>

View file

@ -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;

View file

@ -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);

View file

@ -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>

View file

@ -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>

View file

@ -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>