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

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

もずはっく日記(2014年8月)

2014年8月28日

Bug-org 1056545 Cleanup event handlers of nsEditorEventListener and nsHTMLEditorEventListener
初回投稿日時: 2014年08月28日11時50分05秒
カテゴリ: Mozilla Core Mozilla34 バグ修正
SNS: (list)

Netscape時代からの名残の残っている、nsEditorEventListenernsHTMLEditorEventListenerのコードを現在のコーディングルールにあわせて、一部、書き直そうというバグです。

この修正により、余分なvirtual callが削減され、イベントの妥当性検査が徹底され、Event.typeの文字列値ではなく、WidgetEvent::messageの整数をswitch文で比較するようになったので、イベントハンドリング時の処理が若干軽くなっています(パフォーマンスよりも、CPUの使用率が下がってるのではないかと)。

このため、chrome権限のあるJavascriptで、不正なイベントインターフェースで生成されたイベント(例えば、KeyboardEventで作られたmousedownイベント)は確実に無視されるようになっています。

ただし、nsFocusManagerの動作と整合性持たせるため、また、古いGeckoとの互換性のため、focusイベントとblurイベントは不適切なインターフェースで生成されていても、ハンドリングされるままにしてあります。ですので、new FocusEvent("focus", {});ではなく、new Event("focus", {});と記述しても、例外的にエディタでもフォーカスの移動が発生したものとして処理されます。ただし、この場合は従来通り、Event.typeの文字列比較が発生しますので、新規にコードを書き下ろす場合は、正しく、あるべきFocusEventインターフェースを持ったインスタンスを生成してください。

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

bug-org 1056545を含むエントリ