Servo: スクリプトコードからtinyfiledialogsの使用を削除します

作成日 2019年03月19日  ·  36コメント  ·  ソース: servo/servo

これは、 https://github.com/servo/servo/issues/20428およびhttps://github.com/servo/servo/issues/20429と非常によく似てい

コード: components/script/dom/permissions.rscomponents/embedder_traits/lib.rsports/servo/browser.rsports/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 navigator.permissions.request({'name': 'geolocation'})を呼び出すページを実行して、適切な場所にprintlnを追加することにより、変更されたコードが正しく実行されることを確認してみてください。

あなたはまだこの@cdelerに取り組んでいますか?

私はこれに興味があり、すでに調べましたが、これが可能であれば、IIはいくつかのガイドが必要かもしれません。
私が直面している最初の問題は、_ports / glutin / browser.rs_でPermissionStatusBinding::PermissionStateをどのように使用できるかです。

@kleinphスクリプトとports / glutinの両方で使用できる同等の列挙型を

OK、 @ jdmを試して

@highfive :割り当ててください

ねえ@gatoWololo! この問題に取り組むことに関心をお寄せいただき、ありがとうございます。 これであなたに割り当てられました!

私はそれを行う方法の一般的な感覚を持っています。 私にははっきりしないことの1つは、メッセージを埋め込み者に送信する方法です。 #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);あるので、メッセージを送信できましたが、埋め込み機能から応答を返すにはどうすればよいですか?

ここでの会話に基づいて: httpsembedder_proxyを通過することは合意された方法でしたか?

エンベッダーへのメッセージにはIpcSenderを含めることができ、アクセス許可コードは、応答の受信時に同期的にブロックするか、受信者をipcルーターに接続して、応答の受信時にスレッドのイベントループにイベントを挿入することができます。

エンベダーとの通信方法については、send_to_embedder APIを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.htmlservo/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

最初のものはただクラッシュします。 2つ目はクラッシュしますが、予想されますか? だから私は何かをテストしたとは確信していません。

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()が使用されていることに気づきました。そのコードは、ウィンドウ以外のスコープで呼び出されるとパニックになります。 permission_state_invocation_results APIをWindowではなくGlobalScopeに移動して、これらを修正する必要があります。

test-background-fetch-permission.htmlの失敗を指摘してくれてありがとう-私はそれを修正するために#23645を提出しました。

ありがとう。 分かりました。

これにより、ウィンドウ以外のスコープで呼び出されると、そのコードがパニックになります。 これを修正するには、permission_state_invocation_resultsAPIをWindowではなくGlobalScopeに移動します。

これは別のPRにするべきですか、それとも同じPRの一部にするべきですか?

確かに別のコミットである必要がありますが、別のPRである可能性もあります。 自動テストがこの問題(#23057)の検証に適しているとは思いません。これは、アクセス許可コードがヘッドレスで実行しているときにプロンプ​​トUIを抑制するためです。

#23651で提案された修正は正しい方向に進んでいましたが、対処する必要のあるレビューコメントがいくつかあり、作成者は他のことに移りました。

@peacerebelこれは

@PeaceRebelこれは、

これを明日見ていきます。

@highfive私を割り当てます

ねえ@PeaceRebel! この問題に取り組むことに関心をお寄せいただき、ありがとうございます。 これであなたに割り当てられました!

非アクティブのために割り当てを解除します。

ブランチhttps://github.com/iulianR/servo/tree/issue-23057-tinifiledialogsのマスターの上にPRの変更をリベースしました

それは素晴らしいことです!

文字列のフォーマットをエンベッダーに委任するコミットでブランチを更新しました。

今、私はPRの2番目の部分に対処しようとして少し立ち往生しています。 HostTraitに新しいメソッドが必要かどうか、または既存のprompt_yes_no()メソッドを使用/更新する必要があるかどうかはわかりません。 たぶん、あなたは私のためにメソッドシグネチャを書くことができます。 ありがとう。

今のところ、prompt_yes_noメソッドの使用は問題ないと思います。

このページは役に立ちましたか?
0 / 5 - 0 評価