Auto merge of #27170 - servo-wpt-sync:wpt_update_04-07-2020, r=servo-wpt-sync

Sync WPT with upstream (04-07-2020)

Automated downstream sync of changes from upstream as of 04-07-2020.
[no-wpt-sync]
r? @servo-wpt-sync
This commit is contained in:
bors-servo 2020-07-04 11:55:38 -04:00 committed by GitHub
commit 39e3beb35c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
85 changed files with 716 additions and 155 deletions

View file

@ -1,8 +0,0 @@
[url-charset.window.html]
expected: TIMEOUT
[Blob charset should override any auto-detected charset.]
expected: TIMEOUT
[Blob charset should override <meta charset>.]
expected: TIMEOUT

View file

@ -4,7 +4,7 @@
expected: TIMEOUT expected: TIMEOUT
[Opening a blob URL in a new window immediately before revoking it works.] [Opening a blob URL in a new window immediately before revoking it works.]
expected: FAIL expected: TIMEOUT
[Fetching a blob URL immediately before revoking it works in an iframe.] [Fetching a blob URL immediately before revoking it works in an iframe.]
expected: FAIL expected: FAIL

View file

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

View file

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

View file

@ -35,3 +35,9 @@
[Test @font-face matching for weight 399] [Test @font-face matching for weight 399]
expected: FAIL expected: FAIL
[Test @font-face matching for weight 500]
expected: FAIL
[Test @font-face matching for weight 250]
expected: FAIL

View file

@ -1,4 +0,0 @@
[CaretPosition-001.html]
[Element at (400, 100)]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -0,0 +1,2 @@
[mq-gamut-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[mq-gamut-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[mq-gamut-004.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[mq-negative-range-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[mq-range-001.html]
expected: FAIL

View file

@ -250,9 +250,6 @@
[ShadowRoot interface: attribute onslotchange] [ShadowRoot interface: attribute onslotchange]
expected: FAIL expected: FAIL
[Window interface: attribute event]
expected: FAIL
[AbortController interface: new AbortController() must inherit property "abort()" with the proper type] [AbortController interface: new AbortController() must inherit property "abort()" with the proper type]
expected: FAIL expected: FAIL
@ -628,3 +625,12 @@
[Element interface: operation before((Node or DOMString)...)] [Element interface: operation before((Node or DOMString)...)]
expected: FAIL expected: FAIL
[XPathNSResolver interface: document.createNSResolver(document.body) must inherit property "lookupNamespaceURI(DOMString?)" with the proper type]
expected: FAIL
[Stringification of document.createNSResolver(document.body)]
expected: FAIL
[XPathNSResolver interface: calling lookupNamespaceURI(DOMString?) on document.createNSResolver(document.body) with too few arguments must throw TypeError]
expected: FAIL

View file

@ -318,12 +318,6 @@
[<iframe>: separate response Content-Type: text/html;x=" text/plain] [<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*] [<iframe>: separate response Content-Type: text/html */*]
expected: FAIL expected: FAIL
@ -333,6 +327,12 @@
[<iframe>: combined response Content-Type: */* text/html] [<iframe>: combined response Content-Type: */* text/html]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html */*] [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL expected: FAIL

View file

@ -53,9 +53,3 @@
[combined text/javascript ] [combined text/javascript ]
expected: FAIL expected: FAIL
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript; charset=windows-1252 text/javascript]
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,2 +0,0 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -1,5 +1,4 @@
[supported-elements.html] [supported-elements.html]
expected: TIMEOUT
[Contenteditable element should support autofocus] [Contenteditable element should support autofocus]
expected: FAIL expected: FAIL
@ -10,7 +9,7 @@
expected: FAIL expected: FAIL
[Area element should support autofocus] [Area element should support autofocus]
expected: TIMEOUT expected: FAIL
[Host element with delegatesFocus should support autofocus] [Host element with delegatesFocus should support autofocus]
expected: FAIL expected: FAIL

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-1.html] [iframe_sandbox_popups_escaping-1.html]
expected: TIMEOUT expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
expected: TIMEOUT expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_nonescaping-1.html] [iframe_sandbox_popups_nonescaping-1.html]
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN expected: NOTRUN

View file

@ -1,5 +1,5 @@
[iframe_sandbox_popups_nonescaping-2.html] [iframe_sandbox_popups_nonescaping-2.html]
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN expected: NOTRUN

View file

@ -1,5 +1,4 @@
[iframe_sandbox_popups_nonescaping-3.html] [iframe_sandbox_popups_nonescaping-3.html]
expected: CRASH
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: FAIL expected: FAIL

View file

@ -1,4 +0,0 @@
[form-double-submit.html]
[default submit action should supersede onclick submit()]
expected: FAIL

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] [The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT 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,9 +1,10 @@
[promise-job-entry.html] [promise-job-entry.html]
expected: TIMEOUT
[Fulfillment handler on fulfilled promise] [Fulfillment handler on fulfilled promise]
expected: FAIL expected: FAIL
[Rejection handler on pending-then-rejected promise] [Rejection handler on pending-then-rejected promise]
expected: FAIL expected: TIMEOUT
[Sanity check: this all works as expected with no promises involved] [Sanity check: this all works as expected with no promises involved]
expected: FAIL expected: FAIL
@ -15,5 +16,5 @@
expected: FAIL expected: FAIL
[Fulfillment handler on pending-then-fulfilled promise] [Fulfillment handler on pending-then-fulfilled promise]
expected: FAIL expected: TIMEOUT

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html] [realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.] [X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL expected: FAIL

View file

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

View file

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

View file

@ -0,0 +1,2 @@
[Worker-constructor.html]
expected: ERROR

View file

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

View file

@ -1,8 +0,0 @@
[url-charset.window.html]
expected: TIMEOUT
[Blob charset should override any auto-detected charset.]
expected: TIMEOUT
[Blob charset should override <meta charset>.]
expected: TIMEOUT

View file

@ -7,7 +7,7 @@
expected: FAIL expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.] [Opening a blob URL in a new window immediately before revoking it works.]
expected: FAIL expected: TIMEOUT
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.] [Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: TIMEOUT expected: TIMEOUT

View file

@ -14826,13 +14826,6 @@
{} {}
] ]
], ],
"element-request-fullscreen-dialog-manual.html": [
"360ade0724d1c9a31e8088f8a9177f88d9d5e732",
[
null,
{}
]
],
"element-request-fullscreen-non-top-manual.html": [ "element-request-fullscreen-non-top-manual.html": [
"0764e9c8423a2f528dbfa12d4e57614d7128b4a0", "0764e9c8423a2f528dbfa12d4e57614d7128b4a0",
[ [
@ -24287,8 +24280,56 @@
} }
} }
] ]
],
"reftest_mismatch_page_margins-print.html": [
"62c925927e0d54709b2a1f5ac302edadc4651180",
[
null,
[
[
"/infrastructure/reftest/reftest_match-print-ref.html",
"!="
]
],
{}
]
] ]
} }
},
"svg": {
"painting": {
"reftests": {
"mask-print.svg": [
"ea8e3d29b9c4e1dce623d265c1c1a2865c08d28a",
[
null,
[
[
"/svg/painting/reftests/mask-print-ref.svg",
"=="
]
],
{
"fuzzy": [
[
null,
[
[
1,
1
],
[
17280,
17280
]
]
]
]
}
]
]
}
}
} }
}, },
"reftest": { "reftest": {
@ -211570,7 +211611,85 @@
] ]
], ],
"mq-case-insensitive-001.html": [ "mq-case-insensitive-001.html": [
"dc4d8289953f190f3eadcb13c8cbd594a9f9407f", "c851662343dcfcff5a0d39d37d849f9e0ff8c667",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"mq-deprecated-001.html": [
"0aa06666cd53d913eab8dbe6a95ab6f2b2c855f5",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"mq-gamut-001.html": [
"b0496192933dc4c2e0e4514da630b1828b7d3804",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"mq-gamut-002.html": [
"a63399ede1af3cd6a550c9a9f58ad67fa98970a8",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"mq-gamut-003.html": [
"29bde56e69e84613bd72913218477f331ca31106",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"mq-gamut-004.html": [
"fe285564701be15cf88f379d7747e6aae3291666",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"mq-gamut-005.html": [
"a1fe4d9e6e0c9b28a5103fc7f48b9955998dc6c3",
[ [
null, null,
[ [
@ -211634,6 +211753,32 @@
{} {}
] ]
], ],
"mq-negative-range-001.html": [
"eb1030a8dd4c5c2504e2af114c75a3e97332b2e1",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"mq-range-001.html": [
"f54917ada1cf1f625c7bbb2cf73aeb7305615f08",
[
null,
[
[
"/css/reference/ref-filled-green-100px-square.xht",
"=="
]
],
{}
]
],
"relative-units-001.html": [ "relative-units-001.html": [
"fac94d78edfba4031b7bad980f07ff9e73ddeb72", "fac94d78edfba4031b7bad980f07ff9e73ddeb72",
[ [
@ -343623,7 +343768,7 @@
] ]
}, },
"idlharness.js": [ "idlharness.js": [
"fa24275648fcd266940940f1467e88ea4b5136ed", "25c193b55e5b76fff6dc180268357a11a27abc08",
[] []
], ],
"idlharness.js.headers": [ "idlharness.js.headers": [
@ -343948,6 +344093,10 @@
"a1a641bd971e5a995e3965d27f3e2f8a8e834e7b", "a1a641bd971e5a995e3965d27f3e2f8a8e834e7b",
[] []
], ],
"should_have_interface_object.html": [
"f5bb7bf35a58c23cbaf76f1519ac2dfec5f3ad62",
[]
],
"test_primary_interface_of_undefined.html": [ "test_primary_interface_of_undefined.html": [
"0031558ad42ce55e0cd6ee92ea9973788a9a8017", "0031558ad42ce55e0cd6ee92ea9973788a9a8017",
[] []
@ -347706,6 +347855,10 @@
"871003f3a2303404696d467a7cfaad729b811206", "871003f3a2303404696d467a7cfaad729b811206",
[] []
], ],
"mask-print-ref.svg": [
"5d58e49bc8e9b4f018a69ea4783eb90df83e14c7",
[]
],
"paint-context-001-ref.svg": [ "paint-context-001-ref.svg": [
"99bd8c44cb78a4b0340ad6456c7e58e4ca397257", "99bd8c44cb78a4b0340ad6456c7e58e4ca397257",
[] []
@ -355152,7 +355305,7 @@
[] []
], ],
"firefox.py": [ "firefox.py": [
"8ffe82c662b8b1a2b28c32f967e933d23e9b053d", "fc5abf8b93cd24ed3dd46c4384dd7c94facce232",
[] []
], ],
"firefox_android.py": [ "firefox_android.py": [
@ -381665,7 +381818,7 @@
] ]
], ],
"iframe-all-local-schemes.sub.html": [ "iframe-all-local-schemes.sub.html": [
"20a9cbdc9e086163000baafb9c74d4e9d32b071a", "4b787e0c1888eae0e7c7e8dd75ad154f585af274",
[ [
null, null,
{} {}
@ -413366,7 +413519,7 @@
] ]
], ],
"idlharness.window.js": [ "idlharness.window.js": [
"24b56cf05ada3722c30a7a1427d1cbb324ec366a", "ab965adbc4354b50cb6718349f50e1529bead040",
[ [
"dom/idlharness.window.html?exclude=Node", "dom/idlharness.window.html?exclude=Node",
{ {
@ -433960,6 +434113,15 @@
{} {}
] ]
], ],
"element-request-fullscreen-dialog.html": [
"08091ddc01fb62568f55e64a1f45336a29194e67",
[
null,
{
"testdriver": true
}
]
],
"element-request-fullscreen-not-allowed.html": [ "element-request-fullscreen-not-allowed.html": [
"3170c184823d737eec149c4bdecc9c10321d26ea", "3170c184823d737eec149c4bdecc9c10321d26ea",
[ [

View file

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

View file

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

View file

@ -35,3 +35,9 @@
[Test @font-face matching for weight 249] [Test @font-face matching for weight 249]
expected: FAIL expected: FAIL
[Test @font-face matching for weight 500]
expected: FAIL
[Test @font-face matching for weight 250]
expected: FAIL

View file

@ -1,4 +0,0 @@
[CaretPosition-001.html]
[Element at (400, 100)]
expected: FAIL

View file

@ -0,0 +1,4 @@
[elementFromPoint-001.html]
[CSSOM View - 5 - extensions to the Document interface]
expected: FAIL

View file

@ -0,0 +1,2 @@
[mq-gamut-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[mq-gamut-002.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[mq-gamut-004.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[mq-negative-range-001.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[mq-range-001.html]
expected: FAIL

View file

@ -749,5 +749,14 @@
[Document interface: xmlDoc must inherit property "replaceChildren((Node or DOMString)...)" with the proper type] [Document interface: xmlDoc must inherit property "replaceChildren((Node or DOMString)...)" with the proper type]
expected: FAIL expected: FAIL
[XPathNSResolver interface: document.createNSResolver(document.body) must inherit property "lookupNamespaceURI(DOMString?)" with the proper type]
expected: FAIL
[Stringification of document.createNSResolver(document.body)]
expected: FAIL
[XPathNSResolver interface: calling lookupNamespaceURI(DOMString?) on document.createNSResolver(document.body) with too few arguments must throw TypeError]
expected: FAIL
[idlharness.window.html?include=Node] [idlharness.window.html?include=Node]

View file

@ -318,12 +318,6 @@
[<iframe>: separate response Content-Type: text/html;x=" text/plain] [<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*] [<iframe>: separate response Content-Type: text/html */*]
expected: FAIL expected: FAIL
@ -333,6 +327,12 @@
[<iframe>: combined response Content-Type: */* text/html] [<iframe>: combined response Content-Type: */* text/html]
expected: FAIL expected: FAIL
[<iframe>: combined response Content-Type: text/html */*] [<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
expected: FAIL expected: FAIL

View file

@ -53,9 +53,3 @@
[combined text/javascript ] [combined text/javascript ]
expected: FAIL expected: FAIL
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript; charset=windows-1252 text/javascript]
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,2 +0,0 @@
[cross-origin-objects-on-new-window.html]
expected: TIMEOUT

View file

@ -1,5 +1,4 @@
[supported-elements.html] [supported-elements.html]
expected: TIMEOUT
[Contenteditable element should support autofocus] [Contenteditable element should support autofocus]
expected: FAIL expected: FAIL
@ -10,7 +9,7 @@
expected: FAIL expected: FAIL
[Area element should support autofocus] [Area element should support autofocus]
expected: TIMEOUT expected: FAIL
[Host element with delegatesFocus should support autofocus] [Host element with delegatesFocus should support autofocus]
expected: FAIL expected: FAIL

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_escaping-1.html] [iframe_sandbox_popups_escaping-1.html]
type: testharness type: testharness
expected: TIMEOUT expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_escaping-3.html] [iframe_sandbox_popups_escaping-3.html]
type: testharness type: testharness
expected: TIMEOUT expected: CRASH
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used] [Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT expected: TIMEOUT

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_nonescaping-1.html] [iframe_sandbox_popups_nonescaping-1.html]
type: testharness type: testharness
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN expected: NOTRUN

View file

@ -1,6 +1,6 @@
[iframe_sandbox_popups_nonescaping-2.html] [iframe_sandbox_popups_nonescaping-2.html]
type: testharness type: testharness
expected: CRASH expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN expected: NOTRUN

View file

@ -1,6 +1,5 @@
[iframe_sandbox_popups_nonescaping-3.html] [iframe_sandbox_popups_nonescaping-3.html]
type: testharness type: testharness
expected: CRASH
[Check that popups from a sandboxed iframe do not escape the sandbox] [Check that popups from a sandboxed iframe do not escape the sandbox]
expected: FAIL expected: FAIL

View file

@ -1,4 +0,0 @@
[form-double-submit.html]
[default submit action should supersede onclick submit()]
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] [The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT 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,9 +1,10 @@
[promise-job-entry.html] [promise-job-entry.html]
expected: TIMEOUT
[Fulfillment handler on fulfilled promise] [Fulfillment handler on fulfilled promise]
expected: FAIL expected: FAIL
[Rejection handler on pending-then-rejected promise] [Rejection handler on pending-then-rejected promise]
expected: FAIL expected: TIMEOUT
[Sanity check: this all works as expected with no promises involved] [Sanity check: this all works as expected with no promises involved]
expected: FAIL expected: FAIL
@ -15,5 +16,5 @@
expected: FAIL expected: FAIL
[Fulfillment handler on pending-then-fulfilled promise] [Fulfillment handler on pending-then-fulfilled promise]
expected: FAIL expected: TIMEOUT

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html] [realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.] [X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL expected: FAIL

View file

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

View file

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

View file

@ -0,0 +1,2 @@
[Worker-constructor.html]
expected: ERROR

View file

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

View file

@ -17,6 +17,16 @@
})); }));
} }
function wait_for_error_from_window(opened_window, test) {
window.addEventListener('message', test.step_func(e => {
if (e.source != opened_window)
return;
assert_equals(e.data, "error");
opened_window.close();
test.done();
}));
}
async_test(t => { async_test(t => {
var i = document.createElement('iframe'); var i = document.createElement('iframe');
document.body.appendChild(i); document.body.appendChild(i);
@ -28,6 +38,29 @@
img.src = "{{location[server]}}/images/red-16x16.png"; img.src = "{{location[server]}}/images/red-16x16.png";
}, "<iframe>'s about:blank inherits policy."); }, "<iframe>'s about:blank inherits policy.");
async_test(t => {
var w = window.open("about:blank");
let then = t.step_func(() => {
then = () => {};
var img = w.document.createElement('img');
img.onerror = t.step_func_done(_ => w.close());
img.onload = t.unreached_func();
w.document.body.appendChild(img);
img.src = "{{location[server]}}/images/red-16x16.png";
});
// There are now interoperable way to wait for the initial about:blank
// document to load. Chrome loads it synchronously, hence we can't wait for
// w.onload. On the other side Firefox loads the initial empty document
// later and we can wait for the onload event.
w.onload = then;
setTimeout(then, 200);
// Navigations to about:blank happens synchronously. There is no need to
// wait for the document to load.
}, "window about:blank inherits policy.");
async_test(t => { async_test(t => {
var i = document.createElement('iframe'); var i = document.createElement('iframe');
i.srcdoc = ` i.srcdoc = `
@ -58,6 +91,19 @@
document.body.appendChild(i); document.body.appendChild(i);
}, "<iframe src='blob:...'>'s inherits policy."); }, "<iframe src='blob:...'>'s inherits policy.");
async_test(t => {
var b = new Blob(
[`
<img src='{{location[server]}}/images/red-16x16.png'
onload='window.opener.postMessage("load", "*");'
onerror='window.opener.postMessage("error", "*");'
>
`], {type:"text/html"});
let url = URL.createObjectURL(b);
var w = window.open(url);
wait_for_error_from_window(w, t);
}, "window url='blob:...' inherits policy.");
async_test(t => { async_test(t => {
var i = document.createElement('iframe'); var i = document.createElement('iframe');
i.src = `data:text/html,<img src='{{location[server]}}/images/red-16x16.png' i.src = `data:text/html,<img src='{{location[server]}}/images/red-16x16.png'
@ -70,6 +116,9 @@
document.body.appendChild(i); document.body.appendChild(i);
}, "<iframe src='data:...'>'s inherits policy."); }, "<iframe src='data:...'>'s inherits policy.");
// Opening a window toward a data-url isn't allowed anymore. Hence, it can't
// be tested.
async_test(t => { async_test(t => {
var i = document.createElement('iframe'); var i = document.createElement('iframe');
i.src = `javascript:"<img src='{{location[server]}}/images/red-16x16.png' i.src = `javascript:"<img src='{{location[server]}}/images/red-16x16.png'
@ -82,6 +131,16 @@
document.body.appendChild(i); document.body.appendChild(i);
}, "<iframe src='javascript:...'>'s inherits policy (static <img> is blocked)"); }, "<iframe src='javascript:...'>'s inherits policy (static <img> is blocked)");
async_test(t => {
let url = `javascript:"<img src='{{location[server]}}/images/red-16x16.png'
onload='window.opener.postMessage(\\"load\\", \\"*\\");'
onerror='window.opener.postMessage(\\"error\\", \\"*\\");'
>"`;
let w = window.open(url);
wait_for_error_from_window(w, t);
}, "window url='javascript:...'>'s inherits policy (static <img> is blocked)");
// Same as the previous javascript-URL test, but instead of loading the <img> // Same as the previous javascript-URL test, but instead of loading the <img>
// from the new document, this one is created from the initial empty document, // from the new document, this one is created from the initial empty document,
// while evaluating the javascript-url. // while evaluating the javascript-url.

View file

@ -5,6 +5,8 @@
<title>Test: ASCII-case-insensitivity of media queries</title> <title>Test: ASCII-case-insensitivity of media queries</title>
<link rel="author" title="Gerald Squelart" href="mailto:gerald@mozilla.com"> <link rel="author" title="Gerald Squelart" href="mailto:gerald@mozilla.com">
<link rel="help" href="http://www.w3.org/TR/CSS21/syndata.html#characters"> <link rel="help" href="http://www.w3.org/TR/CSS21/syndata.html#characters">
<link rel="help" href="https://drafts.csswg.org/mediaqueries-4/#mq-syntax">
<link rel="help" href="https://drafts.csswg.org/css-syntax/#rule-defs">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> <link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<style type="text/css"> <style type="text/css">

View file

@ -0,0 +1,32 @@
<!doctype html>
<title>Test: deprecated media types</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
<link rel="help" href="https://drafts.csswg.org/mediaqueries-4/#media-types">
<link rel="help" href="https://drafts.csswg.org/mediaqueries-4/#ref-for-media-type%E2%91%A0%E2%91%A6">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="deprecated media types must not match">
<meta name="flags" content="">
<style>
div {
width: 100px;
height: 100px;
background-color: green;
}
@media
tty,
tv,
projection,
handheld,
braille,
embossed,
aural,
speech
{
div { background-color: red; }
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.
<div></div>

View file

@ -0,0 +1,24 @@
<!doctype html>
<title>Test: srgb color gamut</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
<link rel="help" href="https://www.w3.org/TR/mediaqueries-4/#color-gamut">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="the srgb color-gamut is syntactically supported">
<meta name="flags" content="">
<style>
div {
width: 100px;
height: 100px;
background-color: red;
}
@media (color-gamut: srgb),
not (color-gamut: srgb)
{
div { background-color: green; }
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.
<div></div>

View file

@ -0,0 +1,25 @@
<!doctype html>
<title>Test: p3 color gamut</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
<link rel="help" href="https://www.w3.org/TR/mediaqueries-4/#color-gamut">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/276">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="the p3 color-gamut is syntactically supported">
<meta name="flags" content="">
<style>
div {
width: 100px;
height: 100px;
background-color: red;
}
@media (color-gamut: p3),
not (color-gamut: p3)
{
div { background-color: green; }
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.
<div></div>

View file

@ -0,0 +1,26 @@
<!doctype html>
<title>Test: p3 color gamut (old name)</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
<link rel="help" href="https://www.w3.org/TR/mediaqueries-4/#color-gamut">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4535">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/276">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="the dci-p3 (old name for p3) color-gamut is not syntactically supported">
<meta name="flags" content="">
<style>
div {
width: 100px;
height: 100px;
background-color: green;
}
@media (color-gamut: dci-p3),
not (color-gamut: dci-p3)
{
div { background-color: red; }
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.
<div></div>

View file

@ -0,0 +1,25 @@
<!doctype html>
<title>Test: rec2020 color gamut</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
<link rel="help" href="https://www.w3.org/TR/mediaqueries-4/#color-gamut">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4535">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="the rec2020 color-gamut is syntactically supported">
<meta name="flags" content="">
<style>
div {
width: 100px;
height: 100px;
background-color: red;
}
@media (color-gamut: rec2020),
not (color-gamut: rec2020)
{
div { background-color: green; }
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.
<div></div>

View file

@ -0,0 +1,25 @@
<!doctype html>
<title>Test: rec2020 color gamut(old name)</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
<link rel="help" href="https://www.w3.org/TR/mediaqueries-4/#color-gamut">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/4535">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="the rec-2020 (old name for rec2020) color-gamut is not syntactically supported">
<meta name="flags" content="">
<style>
div {
width: 100px;
height: 100px;
background-color: green;
}
@media (color-gamut: rec-2020),
not (color-gamut: rec-2020)
{
div { background-color: red; }
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.
<div></div>

View file

@ -0,0 +1,40 @@
<!doctype html>
<title>Test: false in the negative range</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
<link rel="help" href="https://drafts.csswg.org/mediaqueries-4/#mq-syntax">
<link rel="help" href="https://www.w3.org/TR/mediaqueries-4/#false-in-the-negative-range">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/1454">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="features that are 'false in the negative range' should still parse with negative values">
<meta name="flags" content="">
<style>
div {
width: 100px;
height: 100px;
background-color: red;
}
@media
(min-width: -100px)
and
(min-height: -100px)
and
(min-resolution: -1dpi)
and
(min-color: -10)
and
(min-color-index: -10)
and
(min-monochrome: -10)
and
(min-device-width: -100px)
and
(min-device-height: -100px)
{
div { background-color: green; }
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.
<div></div>

View file

@ -0,0 +1,27 @@
<!doctype html>
<title>Test: invalid range syntax</title>
<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
<link rel="help" href="https://drafts.csswg.org/mediaqueries-4/#mq-syntax">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/2790">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<meta name="assert" content="range syntax without operator isn't valid syntax, unlike what some earlier iteration of the spec claimed">
<meta name="flags" content="">
<style>
div {
width: 100px;
height: 100px;
background-color: red;
}
/* if the syntax is accepted, whether (width 500px) is true or not doesn't matter,
as the second part of the "or" clause will be true,
but if the syntax is rejected, then the whole thing is ignored.
*/
@media (width 500px) or (min-width: 0) {
div { background-color: green; }
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.
<div></div>

View file

@ -44,8 +44,7 @@ idl_test(
DOMTokenList: ['document.body.classList'], DOMTokenList: ['document.body.classList'],
XPathEvaluator: ['new XPathEvaluator()'], XPathEvaluator: ['new XPathEvaluator()'],
XPathExpression: ['document.createExpression("//*")'], XPathExpression: ['document.createExpression("//*")'],
// Skipped due to https://github.com/web-platform-tests/wpt/issues/18827: XPathNSResolver: ['document.createNSResolver(document.body)'],
// XPathNSResolver: ['document.createNSResolver(document.body)'],
XPathResult: ['document.evaluate("//*", document.body)'], XPathResult: ['document.evaluate("//*", document.body)'],
}); });
} }

View file

@ -2,15 +2,17 @@
<title>Element#requestFullscreen() for dialog element</title> <title>Element#requestFullscreen() for dialog element</title>
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="../trusted-click.js"></script> <script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<div id="log"></div> <div id="log"></div>
<dialog></dialog> <dialog></dialog>
<script> <script>
async_test(t => { async_test(t => {
var dialog = document.querySelector("dialog"); var dialog = document.querySelector("dialog");
assert_true(dialog instanceof HTMLDialogElement); assert_true(dialog instanceof HTMLDialogElement);
trusted_request(t, dialog);
document.onfullscreenchange = t.unreached_func("fullscreenchange event"); document.onfullscreenchange = t.unreached_func("fullscreenchange event");
document.onfullscreenerror = t.step_func_done(); document.onfullscreenerror = t.step_func_done();
test_driver.bless("Initiate fullscreen", () => dialog.requestFullscreen().catch(() => {}));
}); });
</script> </script>

View file

@ -0,0 +1,13 @@
<title>print-reftest should respect @page margins</title>
<link rel=mismatch href=reftest_match-print-ref.html>
<style>
* {margin: 0; padding:0}
@page {margin: 0;}
div {page-break-after: always;}
</style>
<div>
page 1
</div>
<div>
page 2
</div>

View file

@ -1409,6 +1409,18 @@ IdlInterface.prototype.get_interface_object_owner = function()
return legacyNamespace ? self[legacyNamespace] : self; return legacyNamespace ? self[legacyNamespace] : self;
}; };
IdlInterface.prototype.should_have_interface_object = function()
{
// "For every interface that is exposed in a given ECMAScript global
// environment and:
// * is a callback interface that has constants declared on it, or
// * is a non-callback interface that is not declared with the
// [NoInterfaceObject] extended attribute,
// a corresponding property MUST exist on the ECMAScript global object.
return this.is_callback() ? this.has_constants() : !this.has_extended_attribute("NoInterfaceObject");
};
IdlInterface.prototype.assert_interface_object_exists = function() IdlInterface.prototype.assert_interface_object_exists = function()
{ {
var owner = this.get_legacy_namespace() || "self"; var owner = this.get_legacy_namespace() || "self";
@ -1416,8 +1428,9 @@ IdlInterface.prototype.assert_interface_object_exists = function()
}; };
IdlInterface.prototype.get_interface_object = function() { IdlInterface.prototype.get_interface_object = function() {
if (this.has_extended_attribute("NoInterfaceObject")) { if (!this.should_have_interface_object()) {
throw new IdlHarnessError(this.name + " has no interface object due to NoInterfaceObject"); var reason = this.is_callback() ? "lack of declared constants" : "declared [NoInterfaceObject] attribute";
throw new IdlHarnessError(this.name + " has no interface object due to " + reason);
} }
return this.get_interface_object_owner()[this.name]; return this.get_interface_object_owner()[this.name];
@ -1607,20 +1620,14 @@ IdlInterface.prototype.test_self = function()
{ {
// This function tests WebIDL as of 2015-01-13. // This function tests WebIDL as of 2015-01-13.
// "For every interface that is exposed in a given ECMAScript global if (!this.should_have_interface_object()) {
// environment and: return;
// * is a callback interface that has constants declared on it, or }
// * is a non-callback interface that is not declared with the
// [NoInterfaceObject] extended attribute,
// a corresponding property MUST exist on the ECMAScript global object.
// The name of the property is the identifier of the interface, and its // The name of the property is the identifier of the interface, and its
// value is an object called the interface object. // value is an object called the interface object.
// The property has the attributes { [[Writable]]: true, // The property has the attributes { [[Writable]]: true,
// [[Enumerable]]: false, [[Configurable]]: true }." // [[Enumerable]]: false, [[Configurable]]: true }."
if (this.is_callback() && !this.has_constants()) {
return;
}
// TODO: Should we test here that the property is actually writable // TODO: Should we test here that the property is actually writable
// etc., or trust getOwnPropertyDescriptor? // etc., or trust getOwnPropertyDescriptor?
this.assert_interface_object_exists(); this.assert_interface_object_exists();
@ -1704,7 +1711,7 @@ IdlInterface.prototype.test_self = function()
} }
}.bind(this), this.name + " interface: existence and properties of interface object"); }.bind(this), this.name + " interface: existence and properties of interface object");
if (!this.is_callback()) { if (this.should_have_interface_object() && !this.is_callback()) {
subsetTestByKey(this.name, test, function() { subsetTestByKey(this.name, test, function() {
// This function tests WebIDL as of 2014-10-25. // This function tests WebIDL as of 2014-10-25.
// https://heycam.github.io/webidl/#es-interface-call // https://heycam.github.io/webidl/#es-interface-call
@ -1729,7 +1736,7 @@ IdlInterface.prototype.test_self = function()
}.bind(this), this.name + " interface object length"); }.bind(this), this.name + " interface object length");
} }
if (!this.is_callback() || this.has_constants()) { if (this.should_have_interface_object()) {
subsetTestByKey(this.name, test, function() { subsetTestByKey(this.name, test, function() {
// This function tests WebIDL as of 2015-11-17. // This function tests WebIDL as of 2015-11-17.
// https://heycam.github.io/webidl/#interface-object // https://heycam.github.io/webidl/#interface-object
@ -1926,7 +1933,7 @@ IdlInterface.prototype.test_self = function()
// This function tests WebIDL as of 2015-01-21. // This function tests WebIDL as of 2015-01-21.
// https://heycam.github.io/webidl/#interface-object // https://heycam.github.io/webidl/#interface-object
if (this.is_callback() && !this.has_constants()) { if (!this.should_have_interface_object()) {
return; return;
} }
@ -2050,7 +2057,7 @@ IdlInterface.prototype.test_self = function()
subsetTestByKey(this.name, test, function() subsetTestByKey(this.name, test, function()
{ {
if (this.is_callback() && !this.has_constants()) { if (!this.should_have_interface_object()) {
return; return;
} }
@ -2085,7 +2092,7 @@ IdlInterface.prototype.test_self = function()
subsetTestByKey(this.name, test, function() subsetTestByKey(this.name, test, function()
{ {
if (this.is_callback() && !this.has_constants()) { if (!this.should_have_interface_object()) {
return; return;
} }
@ -2326,8 +2333,8 @@ IdlInterface.prototype.test_member_attribute = function(member)
var a_test = subsetTestByKey(this.name, async_test, this.name + " interface: attribute " + member.name); var a_test = subsetTestByKey(this.name, async_test, this.name + " interface: attribute " + member.name);
a_test.step(function() a_test.step(function()
{ {
if (this.is_callback() && !this.has_constants()) { if (!this.should_have_interface_object()) {
a_test.done() a_test.done();
return; return;
} }
@ -2422,7 +2429,7 @@ IdlInterface.prototype.test_member_operation = function(member)
// This function tests WebIDL as of 2015-12-29. // This function tests WebIDL as of 2015-12-29.
// https://heycam.github.io/webidl/#es-operations // https://heycam.github.io/webidl/#es-operations
if (this.is_callback() && !this.has_constants()) { if (!this.should_have_interface_object()) {
a_test.done(); a_test.done();
return; return;
} }
@ -2665,7 +2672,7 @@ IdlInterface.prototype.test_member_stringifier = function(member)
{ {
subsetTestByKey(this.name, test, function() subsetTestByKey(this.name, test, function()
{ {
if (this.is_callback() && !this.has_constants()) { if (!this.should_have_interface_object()) {
return; return;
} }
@ -2859,7 +2866,7 @@ IdlInterface.prototype.test_primary_interface_of = function(desc, obj, exception
// interface object, or the object is from a different global environment // interface object, or the object is from a different global environment
// (not instanceof Object). TODO: test in this case that its prototype at // (not instanceof Object). TODO: test in this case that its prototype at
// least looks correct, even if we can't test that it's actually correct. // least looks correct, even if we can't test that it's actually correct.
if (!this.has_extended_attribute("NoInterfaceObject") if (this.should_have_interface_object()
&& (typeof obj != expected_typeof || obj instanceof Object)) && (typeof obj != expected_typeof || obj instanceof Object))
{ {
subsetTestByKey(this.name, test, function() subsetTestByKey(this.name, test, function()

View file

@ -0,0 +1,30 @@
<!DOCTYPE HTML>
<title>IdlInterface.prototype.should_have_interface_object()</title>
<div id="log"></div>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
<script src="../../../idl-helper.js"></script>
<script>
"use strict";
test(function() {
var i = interfaceFrom("callback interface A { const unsigned short B = 0; };");
assert_true(i.should_have_interface_object());
}, "callback interface with a constant");
test(function() {
var i = interfaceFrom("callback interface A { void b(); sequence<any> c(); };");
assert_false(i.should_have_interface_object());
}, "callback interface without a constant");
test(function() {
var i = interfaceFrom("[NoInterfaceObject] interface A { };");
assert_false(i.should_have_interface_object());
}, "non-callback interface with [NoInterfaceObject]");
test(function() {
var i = interfaceFrom("interface A { };");
assert_true(i.should_have_interface_object());
}, "non-callback interface without [NoInterfaceObject]");
</script>

View file

@ -0,0 +1,5 @@
<svg width="200" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect x="0" y="0" width="200" height="200" fill="green" />
<rect x="0" y="0" width="100" height="200" fill="red"/>
<rect x="90" y="0" width="20" height="200" fill="black" />
</svg>

After

Width:  |  Height:  |  Size: 304 B

View file

@ -0,0 +1,14 @@
<svg width="200" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:html="http://www.w3.org/1999/xhtml">
<html:meta name="fuzzy" content="1;17280" />
<html:link rel="match" href="mask-print-ref.svg" />
<defs>
<mask id="Mask">
<rect x="0" y="0" width="100" height="200" fill="white" />
</mask>
</defs>
<rect x="0" y="0" width="200" height="200" fill="green" />
<rect x="0" y="0" width="200" height="200" fill="red" mask="url(#Mask)" />
<rect x="90" y="0" width="20" height="200" fill="black" />
</svg>

After

Width:  |  Height:  |  Size: 563 B

View file

@ -368,7 +368,8 @@ class BrowserInstance(object):
def stop(self, force=False, skip_marionette=False): def stop(self, force=False, skip_marionette=False):
"""Stop Firefox""" """Stop Firefox"""
if self.runner is not None and self.runner.is_running(): is_running = self.runner is not None and self.runner.is_running()
if is_running:
self.logger.debug("Stopping Firefox %s" % self.pid()) self.logger.debug("Stopping Firefox %s" % self.pid())
shutdown_methods = [(True, lambda: self.runner.wait(self.shutdown_timeout)), shutdown_methods = [(True, lambda: self.runner.wait(self.shutdown_timeout)),
(False, lambda: self.runner.stop(signal.SIGTERM)), (False, lambda: self.runner.stop(signal.SIGTERM)),
@ -387,8 +388,12 @@ class BrowserInstance(object):
except OSError: except OSError:
# This can happen on Windows if the process is already dead # This can happen on Windows if the process is already dead
pass pass
elif self.runner:
# The browser was already stopped, which we assume was a crash
# TODO: Should we check the exit code here?
clean = False
if not skip_marionette: if not skip_marionette:
self.output_handler.after_stop() self.output_handler.after_stop(clean_shutdown=clean)
def pid(self): def pid(self):
if self.runner.process_handler is None: if self.runner.process_handler is None:
@ -472,22 +477,26 @@ class OutputHandler(object):
self.__call__(line) self.__call__(line)
self.line_buffer = [] self.line_buffer = []
def after_stop(self): def after_stop(self, clean_shutdown=True):
self.logger.info("PROCESS LEAKS %s" % self.instance.leak_report_file) self.logger.info("PROCESS LEAKS %s" % self.instance.leak_report_file)
if self.lsan_handler: if self.lsan_handler:
self.lsan_handler.process() self.lsan_handler.process()
if self.instance.leak_report_file is not None: if self.instance.leak_report_file is not None:
# We have to ignore missing leaks in the tab because it can happen that the if not clean_shutdown:
# content process crashed and in that case we don't want the test to fail. # If we didn't get a clean shutdown there probably isn't a leak report file
# Ideally we would record which content process crashed and just skip those. self.logger.warning("Firefox didn't exit cleanly, not processing leak logs")
mozleak.process_leak_log( else:
self.instance.leak_report_file, # We have to ignore missing leaks in the tab because it can happen that the
leak_thresholds=self.mozleak_thresholds, # content process crashed and in that case we don't want the test to fail.
ignore_missing_leaks=["tab", "gmplugin"], # Ideally we would record which content process crashed and just skip those.
log=self.logger, mozleak.process_leak_log(
stack_fixer=self.stack_fixer, self.instance.leak_report_file,
scope=self.group_metadata.get("scope"), leak_thresholds=self.mozleak_thresholds,
allowed=self.mozleak_allowed) ignore_missing_leaks=["tab", "gmplugin"],
log=self.logger,
stack_fixer=self.stack_fixer,
scope=self.group_metadata.get("scope"),
allowed=self.mozleak_allowed)
def __call__(self, line): def __call__(self, line):
"""Write a line of output from the firefox process to the log""" """Write a line of output from the firefox process to the log"""