Servo: рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕реЗ tinyfiledialogs рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдЯрд╛рдПрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдорд╛рд░реНрдЪ 2019  ┬╖  36рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: servo/servo

рдпрд╣ рдмрд╣реБрдд рд╣рдж рддрдХ https://github.com/servo/servo/issues/20428 рдФрд░ https://github.com/servo/servo/issues/20429 рдХреЗ рд╕рдорд╛рди рд╣реИ

рдХреЛрдб: components/script/dom/permissions.rs , components/embedder_traits/lib.rs , ports/servo/browser.rs , ports/libsimpleservo/api/src/lib.rs

A-contenscript A-embedding C-assigned E-less easy

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

--pref dom.permissions.enabled рд╕рд╛рде рд╕рд░реНрд╡реЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рд╕рднреА 36 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@highfive : рдореБрдЭреЗ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ

рдЕрд░реЗ @ejmg! рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдЕрдм рдЖрдкрдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ!

рдЖрдИрдЖрд░рд╕реА рдкрд░ рдкреНрд░рддрд┐ рдЕрдиреБрд░реЛрдз рдЕрдирдЕрд╕рд╛рдЗрдирд┐рдВрдЧред

@highfive : рдореБрдЭреЗ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ

рдЕрд░реЗ @cdeler! рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдЕрдм рдЖрдкрдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ!

рд╣реИрд▓реЛ @jdm ,

рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдПрдХ рдорд╕реМрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдореИрдВ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рд╣реВрдВ?

@cdeler рдЖрдк рдПрдХ рдкреГрд╖реНрда рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ navigator.permissions.request({'name': 'geolocation'}) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдВрд╢реЛрдзрд┐рдд рдХреЛрдб рдЙрдЪрд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкреНрд░рд┐рдВрдЯрд▓рд╛рдЗрди рдЬреЛрдбрд╝рдХрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдЕрднреА рднреА рдЗрд╕ @cdeler рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛ рддреЛ II рдХреЛ рдХреБрдЫ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ _ports/glutin/browser.rs_ рдореЗрдВ PermissionStatusBinding::PermissionState рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ

@kleinph рдЖрдкрдХреЛ рдПрдирдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдкреЛрд░реНрдЯ/рдЧреНрд▓реВрдЯрд┐рди рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ рдлрд┐рд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рджреЛ рдПрдирдо рдХреЗ рдмреАрдЪ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред

рдареАрдХ рд╣реИ, рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ рдХрд┐ @jdm ред рдзрдиреНрдпрд╡рд╛рдж!

рд╕реНрдХреНрд░рд┐рдкреНрдЯ/рдбреАрдУрдПрдо рд╕реЗ рдПрдореНрдмреЗрдбрд░ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг https://github.com/servo/servo/blob/9d9fff3b0ad843286875051e6544b3d4750d6238/components/script/dom/windowproxy.rs#L264 рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@highfive : рдореБрдЭреЗ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ

рдЕрд░реЗ @gatoWololo! рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдЕрдм рдЖрдкрдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ!

рдореБрдЭреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рд╣реИред рдПрдХ рдмрд╛рдд рдЬреЛ рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рдПрдореНрдмреЗрдбрд░ рдХреЛ рдХреИрд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рдПред #20428 рдФрд░ #20429 рджреЛрдиреЛрдВ рдХреЛ embedder_proxy рд╡рд╕реНрддреБ рд╕реАрдзреЗ рдирдХреНрд╖рддреНрд░ рд╕реЗ servo/lib.rs рдорд┐рд▓рддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ Pemissions structs рдХреИрд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдВрдд рдореЗрдВ create_constellation рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рдлреА рдкрд░рддреЗрдВ рд╣реЛрддреА рд╣реИрдВ:

Both of these contain Permissions:
struct WorkerNavigator
struct Navigator

WorkerNavigator is created by WorkerGlobalScope which is created by a:
- ServiceWorkerGlobalScope which is created by a ServiceWorkerManager
   which is init from servo/lib.rs script::init_service_workers(sw_senders);
or
- DedicatedWorkerGlobalScope which is created by run_worker_scope() which is called
  by Worker::Constructor() which does not seem to be called from anywhere...

Navigator is created by Window::Navigator(&self) it is not clear to me how a Window is
created.

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ window.send_to_embedder(msg); , рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдПрдореНрдмреЗрдбрд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВ?

рдпрд╣рд╛рдВ рдмрд╛рддрдЪреАрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░: https://github.com/servo/servo/pull/20480 рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ embedder_proxy рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рд╣рдорддрд┐ рд╣реБрдИ рдереА?

рдПрдореНрдмреЗрдбрд░ рдХреЛ рд╕рдВрджреЗрд╢ рдореЗрдВ рдПрдХ IpcSender рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдиреБрдорддрд┐ рдХреЛрдб рдпрд╛ рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдмреНрд▓реЙрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рд░рд┐рд╕реАрд╡рд░ рдХреЛ рдЖрдИрдкреАрд╕реА рд░рд╛рдЙрдЯрд░ рддрдХ рд╣реБрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдереНрд░реЗрдб рдХреЗ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдореЗрдВ рдПрдХ рдИрд╡реЗрдВрдЯ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдПрдореНрдмреЗрдбрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреНрд▓реЛрдмрд▓рд╕реНрдХреЛрдк рдореЗрдВ рдПрдХ send_to_embedder API рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдЧреНрд▓реЛрдмрд▓рд╕реНрдХреЛрдк рдореЗрдВ рдПрдореНрдмреЗрдбрд░ рдЪреИрдирд▓ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╕рдордЭрджрд╛рд░ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рдЕрдиреБрдорддрд┐ рдХреЛрдб self.global().send_to_embedder(...) рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдореНрдмреЗрдбрд░ рдХреЛ рд╕рдВрджреЗрд╢ рдореЗрдВ IpcSender рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдУрд╣ рд╕рдордЭрд╛ред

рдмрдврд╝рд┐рдпрд╛ рд╣реИред рдореИрдВ рдпрд╣рд╛рдБ рд╕реЗ рдХрд╛рдо рдХрд░реВрдБрдЧрд╛!

рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдореЗрд░рд╛ рдХреЛрдб рдерд╛, рд▓реЗрдХрд┐рди рд╕рд░реНрд╡реЛ рдХреЗ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЭреЗ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

[2019-06-25T21:25:40Z ERROR script::dom::bindings::error] Error at file:///home/gatowololo/permissionTest.html:14:9 window.navigator.permissions is undefined

рдЬрд╣рд╛рдВ permissionTest.html рд╕рд┐рд░реНрдл servo/tests/html/permission-test.html рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╣реИред

window.navigator.permissions is undefined

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ

https://github.com/servo/servo/blob/e100af57a5bd95701b5310871e9909e3726539f0/resources/prefs.json#L17

--pref dom.permissions.enabled рд╕рд╛рде рд╕рд░реНрд╡реЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдореБрдЭреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛ рд░рд╣реА рд╣реИред рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ HTML рдкреГрд╖реНрда рдЦреЛрд▓рдирд╛ (рдпрд╛рдп!) рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░реАрдХреНрд╖рдг рдареАрдХ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдорд┐рд▓рддреЗ рд╣реИрдВ рдЬреЛ "navigator.permissions" рдХрд╣рддреЗ рд╣реИрдВ

> rg "navigator.permissions" *
tests/wpt/web-platform-tests/permissions/interfaces.any.js
24:    self.permissionStatus = await navigator.permissions.query({ name: "geolocation" });
25:    self.permissionStatus = await navigator.permissions.query({ name: "background-fetch" });
37:    Permissions: ['navigator.permissions'],
tests/wpt/web-platform-tests/permissions/test-background-fetch-permission.html
10:    return navigator.permissions.query({name:'background-fetch'}).then(function(result) {
...

рдореИрдВ рдлрд┐рд░ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ wpt рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ:

> ./mach test-wpt --pref dom.permissions.enabled --release tests/wpt/web-platform-tests/permissions/interfaces.any.js
...
0:01.87 pid:4508 [2019-06-27T15:49:30Z ERROR servo] expected a Window scope

> ./mach test-wpt --pref dom.permissions.enabled --release tests/wpt/web-platform-tests/permissions/test-background-fetch-permission.html
...
 0:01.65 pid:4793 [2019-06-27T15:51:24Z ERROR servo] assertion failed: !JS_IsExceptionPending(cx)
 0:01.65 pid:4793 Pipeline failed in hard-fail mode.  Crashing!
 0:01.69 TEST_END: CRASH, expected OK

рдкрд╣рд▓рд╛ рдмрд╕ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЙрдореНрдореАрдж рд╣реИ? рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рднреА рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИред

рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рднреА рд╣реИрдВ рдЬреИрд╕реЗ tests/html/permission-test.html рдЬреЛ wpt рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВред рддреЛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПред

рдкрд░реАрдХреНрд╖рдг/рдПрдЪрдЯреАрдПрдордПрд▓ рдореИрдиреНрдпреБрдЕрд▓ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк ./mach run tests/html/permission-test.html рд╕рд╛рде рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЕрднреА рдЕрдиреБрдорддрд┐ рдХреЛрдб рдореЗрдВ as_window() рдХреЗ рдЙрдкрдпреЛрдЧреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ (https://github.com/servo/servo/blob/fd174c54ef4fa6574ae782dacccaeccd14abb936/components/script/dom/permissions.rs#L321-L322) рдЬреЛ рдмрдирд╛ рджреЗрдЧрд╛ рдЙрд╕ рдХреЛрдб рдХреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рдЧреИрд░-рд╡рд┐рдВрдбреЛ рд╕реНрдХреЛрдк рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ рд╡рд┐рдВрдбреЛ рдХреЗ рдмрдЬрд╛рдп permission_state_invocation_results API рдХреЛ GlobalScope рдкрд░ рд▓реЗ рдЬрд╛рдХрд░ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

test-background-fetch-permission.html рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж - рдореИрдВрдиреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП #23645 рджрд░реНрдЬ рдХрд┐рдпрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рджред рдЕрдЪреНрдЫрд╛ рдРрд╕рд╛ рд╣реИред

рдЬреЛ рдЙрд╕ рдХреЛрдб рдХреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рдЧреИрд░-рд╡рд┐рдВрдбреЛ рд╕реНрдХреЛрдк рдореЗрдВ рдмреБрд▓рд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдЖрддрдВрдХрд┐рдд рдХрд░ рджреЗрдЧрд╛ред рд╣рдореЗрдВ рдЕрдиреБрдорддрд┐_рд╕реНрдЯреЗрдЯ_рдЗрдирд╡реЛрдХреЗрд╢рди_results рдПрдкреАрдЖрдИ рдХреЛ рд╡рд┐рдВрдбреЛ рдХреЗ рдмрдЬрд╛рдп рдЧреНрд▓реЛрдмрд▓рд╕реНрдХреЛрдк рдкрд░ рд▓реЗ рдЬрд╛рдХрд░ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдкреАрдЖрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЙрд╕реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдкреАрдЖрд░ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ (#23057) рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЕрдЪреНрдЫреЗ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрдорддрд┐ рдХреЛрдб рдмрд┐рдирд╛ рд╕рд┐рд░ рдХреЗ рдЪрд▓рдиреЗ рдкрд░ рд╕рдВрдХреЗрдд рджреЗрдиреЗ рд╡рд╛рд▓реЗ UI рдХреЛ рджрдмрд╛ рджреЗрддрд╛ рд╣реИред

# 23651 рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реБрдзрд╛рд░ рд╕рд╣реА рд░рд╛рд╕реНрддреЗ рдкрд░ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рдореАрдХреНрд╖рд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдереАрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд▓реЗрдЦрдХ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдкрд░ рдЪрд▓реЗ рдЧрдП рд╣реИрдВред

@peacerebel рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрдЧрд▓рд╛ рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!

@PeaceRebel рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрдЧрд▓рд╛ рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!

рдХрд▓ рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд░ рдбрд╛рд▓реЗрдВрдЧреЗред

@highfive рдореБрдЭреЗ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ

рдЕрд░реЗ @PeaceRebel! рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдЕрдм рдЖрдкрдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ!

рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдХрд╛рд░рдг рдЕрдирдЕрд╕рд╛рдЗрдирд┐рдВрдЧред

рдореИрдВрдиреЗ рдЕрдкрдиреА рд╢рд╛рдЦрд╛ https://github.com/iulianR/servo/tree/issue-23057-tinifiledialogs рдкрд░ рдорд╛рд╕реНрдЯрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкреАрдЖрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкреБрди: рдЖрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛

рд╡рд╣ рдорд╣рд╛рди рд╣реЛрдЧрд╛!

рдореИрдВрдиреЗ рдЕрдкрдиреА рд╢рд╛рдЦрд╛ рдХреЛ рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрд╡рд░реВрдкрдг рдХреЛ рдПрдореНрдмреЗрдбрд░реНрд╕ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рдЕрдм рдореИрдВ рдкреАрдЖрд░ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдереЛрдбрд╝рд╛ рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ HostTrait рдкрд░ рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж prompt_yes_no() рдЙрдкрдпреЛрдЧ/рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореЗрд░реЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд▓рд┐рдЦ рд╕рдХреЗрдВред рдзрдиреНрдпрд╡рд╛рджред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдореНрдкреНрдЯ_рдпрд╕_рдиреЛ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕