この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2016年3月)

2016年3月16日

Bug-org 1203059 [non-e10s] Keyboard events which are reserved shortcuts in chrome shouldn't be fired on web content like e10s mode
初回投稿日時: 2016年10月15日21時59分57秒
最終更新日時: 2016年10月15日22時04分56秒
カテゴリ: Events KeyboardEvent Mozilla Core Mozilla48 バグ修正
SNS: (list)

e10sモードではchromeが予約済みのショートカットキーのkeypressイベントはWebコンテンツ上では発火しないようになっていましたが、それを非e10sモードでもそのような動作に修正すべきであるというバグです。

私は関与していなかったのですが、すでに関係者でディスカッションが行われ、ユーザが悪意あるWebサイトによって、キーボードだけで操作不能に陥らないように、いくつかのショートカットキーはWebコンテンツで上書きできないようにする、そのためにそもそも、イベントを発火しないようにする、ということになっていました。これは、Google Chrome、Edge、Safariの動作にあわせた変更決定です。

nsXBLWindowKeyHandlerは、XULのdocumentノードにイベントリスナを設置し、キャプチャフェイズで真っ先に、keypressイベントが予約されたキーコンビネーションのものかどうかを確認します。そこで、今回の修正では、この時に予約されていることが分かると、WidgetKeyboardEvent::mFlags::mOnlySystemGroupDispatchInContenttrueにします。これがtrueの場合、その名前の通り、そのイベントはWebコンテンツのノードではシステムグループに登録されているイベントリスナしか実行しなくなります(つまり、デフォルトグループのchrome、システムグループのchrome、システムグループのcontentのリスナでのみ実行されます)。

このため、Webコンテンツから見ると、予約済みのショートカットキーのkeypressイベントは全く発火されないように見えることになります。

ちなみに予約済みショートカットキーは、Firefoxのソースコードをreserved="true"で検索すると、XULの<command>要素か<key>要素がヒットしますので、これを参考にしてください。

関連するかもしれないエントリ

bug-org 1203059を含むエントリ