Servo: إزالة استخدام tinyfiledialogs من التعليمات البرمجية للبرنامج النصي

تم إنشاؤها على ١٩ مارس ٢٠١٩  ·  36تعليقات  ·  مصدر: servo/servo

هذا مشابه جدًا لـ https://github.com/servo/servo/issues/20428 و https://github.com/servo/servo/issues/20429. في الوقت الحالي ، تستدعي شفرة أذونات DOM مكتبة tinyfiledialogs مباشرة لإنشاء واجهة مستخدم إذن. بدلاً من ذلك ، يجب أن نرسل رسالة إلى أداة التضمين ونجعل طبقة التضمين تنشئ واجهة المستخدم.

الكود: 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

التعليق الأكثر فائدة

جرب تشغيل Servo بـ --pref dom.permissions.enabled .

ال 36 كومينتر

highfive : كلفني

ياejmg! شكرا لاهتمامك في العمل على هذه القضية. تم تعيينه لك الآن!

إلغاء تعيين لكل طلب على IRC.

highfive : كلفني

ياcdeler! شكرا لاهتمامك في العمل على هذه القضية. تم تعيينه لك الآن!

مرحبا jdm ،

لدي مسودة تنفيذ محليًا. هل تعلم كيف يمكنني التحقق من ذلك محليًا؟

cdeler قد تحاول تشغيل صفحة تستدعي navigator.permissions.request({'name': 'geolocation'}) للتحقق من أن الكود المعدل يعمل بشكل صحيح عن طريق إضافة println في الأماكن المناسبة.

هل ما زلت تعمل على هذاcdeler؟

أنا مهتم بهذا وقد بحثت فيه بالفعل ، لكن قد أحتاج إلى بعض التوجيه إذا كان ذلك ممكنًا.
المشكلة الأولى التي أواجهها هي كيف يمكنني استخدام PermissionStatusBinding::PermissionState في _ports / glutin / browser.rs_

kleinph ستحتاج إلى تحديد تعداد مكافئ في embedder_traits ، والذي يتوفر لكل من البرنامج النصي والمنافذ / glutin ، ثم التحويل بين العددين حسب الحاجة.

حسنًا ، سأحاول ذلك jdm . شكرا!

تم العثور على مثال لإرسال رسالة من script / DOM إلى أداة التضمين على https://github.com/servo/servo/blob/9d9fff3b0ad843286875051e6544b3d4750d6238/components/script/dom/windowproxy.rs#L264

highfive : كلفني

ياgatoWololo! شكرا لاهتمامك في العمل على هذه القضية. تم تعيينه لك الآن!

لدي فكرة عامة عن كيفية القيام بذلك. هناك شيء واحد غير واضح بالنسبة لي وهو كيفية إرسال الرسالة إلى أداة التضمين. يحصل كل من # 20428 و # 20429 على كائن embedder_proxy مباشرةً من الكوكبة الموجودة في servo/lib.rs . ومع ذلك ، بالنظر إلى كيفية إنشاء هياكل Pemisssions ، هناك طبقات تمامًا قبل الوصول أخيرًا إلى 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 وإدخال حدث في حلقة حدث مؤشر الترابط عند تلقي استجابة.

بالنسبة لكيفية التواصل مع أداة التضمين ، أعتقد أن إضافة واجهة برمجة تطبيقات send_to_embedder إلى GlobalScope وتخزين قناة التضمين في 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

جرب تشغيل Servo بـ --pref dom.permissions.enabled .

أواجه صعوبة في اختبار التنفيذ الخاص بي. فتح صفحة html التي تستدعي أذونات تعمل (yay!). لكنني غير قادر على إجراء الاختبارات المتعلقة بهذه الميزة بشكل صحيح. لذلك أجد اختبارات تسمي "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. لذلك لست متأكدًا من كيفية تشغيلها.

الاختبارات / html هي اختبارات يدوية يمكنك إجراؤها باستخدام ./mach run tests/html/permission-test.html . لقد لاحظت للتو استخدامات as_window() في كود الأذونات (https://github.com/servo/servo/blob/fd174c54ef4fa6574ae782dacccaeccd14abb936/components/script/dom/permissions.rs#L321-L322) مما سيجعل ذعر هذا الرمز في أي وقت يتم استدعاؤه في نطاق بخلاف Window. نحتاج إلى إصلاح ذلك عن طريق نقل permission_state_invocation_results API إلى GlobalScope بدلاً من Window.

نشكرك على الإشارة إلى الفشل في test-background-fetch-أذونات.html - لقد قدمت # 23645 لإصلاحه.

شكرا. أرى.

الأمر الذي سيجعل هذا الرمز في حالة ذعر في أي وقت يتم استدعاؤه في نطاق غير تابع لـ Window. نحتاج إلى إصلاح ذلك عن طريق نقل واجهة برمجة تطبيقات allow_state_invocation_results إلى GlobalScope بدلاً من Window.

هل يجب أن تكون هذه العلاقات العامة منفصلة أم جزءًا من نفس العلاقات العامة؟

يجب أن يكون بالتأكيد التزامًا منفصلاً ، ولكن يمكن أن يكون علاقة عامة منفصلة أيضًا. لا أتوقع أن تكون الاختبارات الآلية جيدة للتحقق من هذه المشكلة (# 23057) ، لأن كود الأذونات يمنع واجهة المستخدم المطالبة عند التشغيل بلا رأس.

كان الإصلاح المقترح في # 23651 على المسار الصحيح ، لكن كان لدي بعض تعليقات المراجعة التي يجب معالجتها وانتقل المؤلف إلى أشياء أخرى.

peacerebel قد تكون هذه مشكلة تالية جيدة للعمل عليها!

PeaceRebel قد يكون هذا العدد القادم الجيد للعمل عليه!

سوف نلقي نظرة على هذا غدا.

highfive كلفني

يا @ بيسريبيل! شكرا لاهتمامك في العمل على هذه القضية. تم تعيينه لك الآن!

إلغاء التعيين بسبب عدم النشاط.

لقد أعدت تأسيس التغييرات في العلاقات العامة على المستوى الرئيسي في فرعي https://github.com/iulianR/servo/tree/issue-23057-tinifiledialogs. يمكنني محاولة معالجة التعليقات وإجراء علاقات عامة جديدة إذا كان الأمر جيدًا معك.

هذا سيكون رائع!

لقد قمت بتحديث فرع بلدي مع الالتزام بأن المندوبين سلسلة تهيئة إلى embedders.

الآن أنا عالق قليلاً في محاولة معالجة الجزء الثاني من العلاقات العامة. لست متأكدًا مما إذا كنت بحاجة إلى طريقة جديدة على HostTrait ، أو إذا كان يجب علي استخدام / تحديث prompt_yes_no() الطريقة الموجودة بالفعل. ربما يمكنك كتابة توقيع الطريقة لي. شكرا.

أعتقد أن استخدام طريقة quick_yes_no تبدو جيدة في الوقت الحالي.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات