Servo: 슀크립트 μ½”λ“œμ—μ„œ tinyfiledialog μ‚¬μš© 제거

에 λ§Œλ“  2019λ…„ 03μ›” 19일  Β·  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 Servoλ₯Ό μ‹€ν–‰ν•΄ λ³΄μ„Έμš”.

λͺ¨λ“  36 λŒ“κΈ€

@highfive : λ‚˜μ—κ²Œ ν• λ‹Ή

μ•ˆλ…•ν•˜μ„Έμš” @ejmg! 이 λ¬Έμ œμ— 관심을 κ°€μ Έμ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 이제 λ‹Ήμ‹ μ—κ²Œ ν• λ‹Ήλ˜μ—ˆμŠ΅λ‹ˆλ‹€!

IRC에 λŒ€ν•œ μš”μ²­μ— 따라 ν• λ‹Ή ν•΄μ œ.

@highfive : λ‚˜μ—κ²Œ ν• λ‹Ή

μ•ˆλ…•ν•˜μ„Έμš” @cdelerμž…λ‹ˆλ‹€! 이 λ¬Έμ œμ— 관심을 κ°€μ Έμ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 이제 λ‹Ήμ‹ μ—κ²Œ ν• λ‹Ήλ˜μ—ˆμŠ΅λ‹ˆλ‹€!

μ•ˆλ…•ν•˜μ„Έμš” @jdm ,

λ‘œμ»¬μ— μ΄ˆμ•ˆ κ΅¬ν˜„μ΄ μžˆμŠ΅λ‹ˆλ‹€. ν˜„μ§€μ—μ„œ μ–΄λ–»κ²Œ 확인할 수 μžˆλŠ”μ§€ μ•„μ„Έμš”?

@cdeler μ μ ˆν•œ μœ„μΉ˜μ— println을 μΆ”κ°€ν•˜μ—¬ μˆ˜μ •λœ μ½”λ“œκ°€ μ˜¬λ°”λ₯΄κ²Œ μ‹€ν–‰λ˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ navigator.permissions.request({'name': 'geolocation'}) λ₯Ό ν˜ΈμΆœν•˜λŠ” νŽ˜μ΄μ§€λ₯Ό μ‹€ν–‰ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

이 @cdelerμ—μ„œ 아직도 μž‘μ—… μ€‘μ΄μ‹ κ°€μš”?

λ‚˜λŠ” 이것에 관심이 있고 이미 그것을 μ‘°μ‚¬ν–ˆμ§€λ§Œ 이것이 κ°€λŠ₯ν•œ 경우 II에 μ•½κ°„μ˜ 지침이 ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λ‚΄κ°€ μ§λ©΄ν•œ 첫 번째 λ¬Έμ œλŠ” _ports/glutin/browser.rs_μ—μ„œ PermissionStatusBinding::PermissionState λ₯Ό μ–΄λ–»κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

@kleinph μŠ€ν¬λ¦½νŠΈμ™€ 포트/ embedder_traits 에 λ™λ“±ν•œ μ—΄κ±°ν˜•μ„ μ •μ˜ν•œ λ‹€μŒ ν•„μš”μ— 따라 두 μ—΄κ±°ν˜• 간에 λ³€ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ’‹μ•„μš”, @jdm 을 μ‹œλ„ν•΄

슀크립트/DOMμ—μ„œ μž„λ² λ”λ‘œ λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄λŠ” μ˜ˆλŠ” https://github.com/servo/servo/blob/9d9fff3b0ad843286875051e6544b3d4750d6238/components/script/dom/windowproxy.rs#L264에 μžˆμŠ΅λ‹ˆλ‹€.

@highfive : λ‚˜μ—κ²Œ ν• λ‹Ή

μ•ˆλ…•ν•˜μ„Έμš” @gatoWololo! 이 λ¬Έμ œμ— 관심을 κ°€μ Έμ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 이제 λ‹Ήμ‹ μ—κ²Œ ν• λ‹Ήλ˜μ—ˆμŠ΅λ‹ˆλ‹€!

λ‚˜λŠ” κ·Έκ²ƒμ„ν•˜λŠ” 방법에 λŒ€ν•œ 일반적인 감각을 가지고 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜μ—κ²Œ λͺ…ν™•ν•˜μ§€ μ•Šμ€ ν•œ κ°€μ§€λŠ” μž„λ² λ”μ— λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄λŠ” λ°©λ²•μž…λ‹ˆλ‹€. #20428 κ³Ό #20429 λͺ¨λ‘ servo/lib.rs 의 μ„±μ’Œμ—μ„œ 직접 embedder_proxy 개체λ₯Ό μ–»μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ Pemissions ꡬ쑰체가 μƒμ„±λ˜λŠ” 방식을 보면 λ§ˆμΉ¨λ‚΄ 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λ₯Ό 포함할 수 있으며 κΆŒν•œ μ½”λ“œλŠ” 응닡 μˆ˜μ‹  μ‹œ λ™κΈ°μ μœΌλ‘œ μ°¨λ‹¨ν•˜κ±°λ‚˜ μˆ˜μ‹ κΈ°λ₯Ό ipc λΌμš°ν„°μ— μ—°κ²°ν•˜κ³  응닡이 μˆ˜μ‹ λ  λ•Œ μŠ€λ ˆλ“œμ˜ 이벀트 루프에 이벀트λ₯Ό μ£Όμž…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Embedder와 ν†΅μ‹ ν•˜λŠ” 방법은 GlobalScope에 send_to_embedder APIλ₯Ό μΆ”κ°€ν•˜κ³  Embedder 채널을 GlobalScope에 μ €μž₯ν•˜λŠ” 것이 ν˜„λͺ…ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ κΆŒν•œ μ½”λ“œλŠ” self.global().send_to_embedder(...) 와 같은 것을 μ‚¬μš©ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

μž„λ² λ”μ— λŒ€ν•œ λ©”μ‹œμ§€λŠ” IpcSenderλ₯Ό 포함할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„, μ•Œκ² μŠ΅λ‹ˆλ‹€.

잘 λ“€λ¦°λ‹€. μ—¬κΈ°μ„œλΆ€ν„° μΌν• κ²Œ!

κ·Έλž˜μ„œ λ­”κ°€ νš¨κ³Όκ°€ μžˆλŠ” 것 κ°™μ•„μš”. κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” 그것을 μ‹€μ œλ‘œ ν…ŒμŠ€νŠΈ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ‚΄ μ½”λ“œλΌκ³  μƒκ°ν–ˆμ§€λ§Œ μˆ˜μ •λ˜μ§€ μ•Šμ€ λ²„μ „μ˜ Servoλ₯Ό μ‚¬μš©ν•˜λ©΄ μ—¬μ „νžˆ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

[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 Servoλ₯Ό μ‹€ν–‰ν•΄ λ³΄μ„Έμš”.

κ΅¬ν˜„μ„ ν…ŒμŠ€νŠΈν•˜λŠ” 데 어렀움을 κ²ͺκ³  μžˆμŠ΅λ‹ˆλ‹€. κΆŒν•œμ„ ν˜ΈμΆœν•˜λŠ” 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

첫 λ²ˆμ§ΈλŠ” κ·Έλƒ₯ μΆ©λŒν•©λ‹ˆλ‹€. 두 번째 좩돌이 μ˜ˆμƒλ˜μ§€λ§Œ μ˜ˆμƒλ©λ‹ˆκΉŒ? κ·Έλž˜μ„œ λ‚˜λŠ” λ‚΄κ°€ 아무 것도 ν…ŒμŠ€νŠΈν•˜μ§€ μ•Šμ•˜λ‹€κ³  ν™•μ‹ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

wpt의 일뢀가 μ•„λ‹Œ tests/html/permission-test.html 와 같은 일뢀 ν…ŒμŠ€νŠΈλ„ μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λ‚˜λŠ” 그듀을 μ‹€ν–‰ν•˜λŠ” 방법을 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

tests/html 은 ./mach run tests/html/permission-test.html μ‹€ν–‰ν•  수 μžˆλŠ” μˆ˜λ™ ν…ŒμŠ€νŠΈμž…λ‹ˆλ‹€. 방금 κΆŒν•œ μ½”λ“œ(https://github.com/servo/servo/blob/fd174c54ef4fa6574ae782dacccaeccd14abb936/components/script/dom/permissions.rs#L321-L322)μ—μ„œ as_window() μ‚¬μš©μ„ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€ λΉ„ Window λ²”μœ„μ—μ„œ 호좜될 λ•Œλ§ˆλ‹€ ν•΄λ‹Ή μ½”λ“œ νŒ¨λ‹‰μ΄ λ°œμƒν•©λ‹ˆλ‹€. permission_state_invocation_results APIλ₯Ό Window λŒ€μ‹  GlobalScope둜 μ΄λ™ν•˜μ—¬ μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

test-background-fetch-permission.html의 였λ₯˜λ₯Ό 지적해 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. μˆ˜μ •ν•˜κΈ° μœ„ν•΄ #23645λ₯Ό μ œμΆœν–ˆμŠ΅λ‹ˆλ‹€.

감사 ν•΄μš”. μ•Œ κ² μ–΄μš”.

λΉ„ Window λ²”μœ„μ—μ„œ 호좜될 λ•Œλ§ˆλ‹€ ν•΄λ‹Ή μ½”λ“œλ₯Ό νŒ¨λ‹‰ μƒνƒœλ‘œ λ§Œλ“­λ‹ˆλ‹€. permission_state_invocation_results APIλ₯Ό Window λŒ€μ‹  GlobalScope둜 μ΄λ™ν•˜μ—¬ μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이것은 λ³„λ„μ˜ PR λ˜λŠ” λ™μΌν•œ PR의 일뢀여야 ν•©λ‹ˆκΉŒ?

ν™•μ‹€νžˆ λ³„λ„μ˜ 컀밋이어야 ν•˜μ§€λ§Œ λ³„λ„μ˜ PR일 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μžλ™ ν…ŒμŠ€νŠΈκ°€ 이 문제(#23057)λ₯Ό ν™•μΈν•˜λŠ” 데 μ ν•©ν•˜μ§€ μ•Šμ„ 것이라고 μƒκ°ν•©λ‹ˆλ‹€. κΆŒν•œ μ½”λ“œκ°€ ν—€λ“œλ¦¬μŠ€λ‘œ μ‹€ν–‰ν•  λ•Œ ν”„λ‘¬ν”„νŠΈ UIλ₯Ό μ–΅μ œν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

#23651μ—μ„œ μ œμ•ˆλœ μˆ˜μ • 사항은 μ˜¬λ°”λ₯Έ λ°©ν–₯으둜 μ§„ν–‰λ˜μ—ˆμ§€λ§Œ ν•΄κ²°ν•΄μ•Ό ν•  λͺ‡ 가지 κ²€ν†  의견이 μžˆμ—ˆκ³  μž‘μ„±μžλŠ” λ‹€λ₯Έ μž‘μ—…μœΌλ‘œ μ΄λ™ν–ˆμŠ΅λ‹ˆλ‹€.

@peacerebel 이것은 μž‘μ—…ν•˜κΈ°μ— 쒋은 λ‹€μŒ ν˜Έκ°€ 될 κ²ƒμž…λ‹ˆλ‹€!

@PeaceRebel 이것은 μž‘μ—…ν•˜κΈ°μ— 쒋은 λ‹€μŒ ν˜Έκ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€!

이것은 내일 μ‚΄νŽ΄λ³Ό κ²ƒμž…λ‹ˆλ‹€.

@highfive ν• λ‹Ή

μ•ˆλ…•ν•˜μ„Έμš” @PeaceRebelμž…λ‹ˆλ‹€! 이 λ¬Έμ œμ— 관심을 κ°€μ Έμ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 이제 λ‹Ήμ‹ μ—κ²Œ ν• λ‹Ήλ˜μ—ˆμŠ΅λ‹ˆλ‹€!

ν™œλ™μ΄ μ—†μ–΄ 할당을 μ·¨μ†Œν•©λ‹ˆλ‹€.

λ‚΄ λΆ„κΈ° https://github.com/iulianR/servo/tree/issue-23057-tinifiledialogs 의 λ§ˆμŠ€ν„° μœ„μ— μžˆλŠ” PR의 λ³€κ²½ 사항을 λ‹€μ‹œ 기반으둜 ν–ˆμŠ΅λ‹ˆλ‹€

그것은 쒋을 κ²ƒμž…λ‹ˆλ‹€!

λ¬Έμžμ—΄ ν˜•μ‹μ„ μž„λ² λ”μ— μœ„μž„ν•˜λŠ” μ»€λ°‹μœΌλ‘œ λΆ„κΈ°λ₯Ό μ—…λ°μ΄νŠΈν–ˆμŠ΅λ‹ˆλ‹€.

이제 PR의 두 번째 뢀뢄을 닀루렀고 ν•˜λŠ” 데 μ•½κ°„ λ§‰ν˜”μŠ΅λ‹ˆλ‹€. HostTrait 에 λŒ€ν•œ μƒˆ λ©”μ„œλ“œκ°€ ν•„μš”ν•œμ§€ λ˜λŠ” 이미 μ‘΄μž¬ν•˜λŠ” prompt_yes_no() λ©”μ„œλ“œλ₯Ό μ‚¬μš©/μ—…λ°μ΄νŠΈν•΄μ•Ό ν•˜λŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μ €λ₯Ό μœ„ν•΄ λ©”μ†Œλ“œ μ„œλͺ…을 μž‘μ„±ν•΄ μ£Όμ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€. 감사 ν•΄μš”.

μ§€κΈˆμ€ prompt_yes_no λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

CYBAI picture CYBAI  Β·  3μ½”λ©˜νŠΈ

SimonSapin picture SimonSapin  Β·  3μ½”λ©˜νŠΈ

pshaughn picture pshaughn  Β·  3μ½”λ©˜νŠΈ

ferjm picture ferjm  Β·  3μ½”λ©˜νŠΈ

shinglyu picture shinglyu  Β·  4μ½”λ©˜νŠΈ