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

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

もずはっく日記(2015年7月)

2015年7月19日

Bug-org 1179122 [e10s] TextComposition should manage target in parent process even when its child process has focus
初回投稿日時: 2015年07月19日13時05分29秒
カテゴリ: e10s Events IME Mozilla Core Mozilla42 バグ修正
SNS: (list)

e10sモードでは、ネイティブのフォーカスは、常にchromeプロセスが持っています。つまり、IMEからのネイティブイベントをハンドリングするのはchromeプロセスになります。そして、各OS向けのwidgetが生成したWidgetCompositionEventは、子プロセス内にフォーカスがある場合に、EventStateManager::PreHandleEvent()で子プロセスにイベントを送信し、chromeプロセス内では何もしないという形をとっていました。つまり、WidgetCompositionEventの送信ターゲットを管理するTextCompositionのインスタンスは子プロセスでのみ生成されていました。

しかし、これでは未確定文字列が存在している状態で親プロセス内でフォーカス移動が発生し、子プロセスがフォーカスを持たなくなってしまうと、強制確定のために発生したWidgetCompositionEventが新たにフォーカスを得た要素へ送信されてしまい、おかしなことになります。

そこで、今回の修正では、EventStateManager::PreHandleEvent()では何も行わないようにし、chromeプロセス内でも常にTextCompositionを生成し、これにWidgetCompositionEventの送信を任せるようにしました。TextCompositionは送信ターゲットが子プロセスを持っていた場合には、DOMツリーにはイベントを送信せず、その子プロセスに送信します。これにより、親プロセス内でフォーカス移動があっても、確定されるまでの一連のWidgetCompsoitionEventは確実に未確定文字列を持っている子プロセスへ送信されることが保証されました。

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

bug-org 1179122を含むエントリ