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: 
	Tweet (list)
	
e10sモードでは、ネイティブのフォーカスは、常にchromeプロセスが持っています。つまり、IMEからのネイティブイベントをハンドリングするのはchromeプロセスになります。そして、各OS向けのwidgetが生成したWidgetCompositionEventは、子プロセス内にフォーカスがある場合に、EventStateManager::PreHandleEvent()で子プロセスにイベントを送信し、chromeプロセス内では何もしないという形をとっていました。つまり、WidgetCompositionEventの送信ターゲットを管理するTextCompositionのインスタンスは子プロセスでのみ生成されていました。
しかし、これでは未確定文字列が存在している状態で親プロセス内でフォーカス移動が発生し、子プロセスがフォーカスを持たなくなってしまうと、強制確定のために発生したWidgetCompositionEventが新たにフォーカスを得た要素へ送信されてしまい、おかしなことになります。
そこで、今回の修正では、EventStateManager::PreHandleEvent()では何も行わないようにし、chromeプロセス内でも常にTextCompositionを生成し、これにWidgetCompositionEventの送信を任せるようにしました。TextCompositionは送信ターゲットが子プロセスを持っていた場合には、DOMツリーにはイベントを送信せず、その子プロセスに送信します。これにより、親プロセス内でフォーカス移動があっても、確定されるまでの一連のWidgetCompsoitionEventは確実に未確定文字列を持っている子プロセスへ送信されることが保証されました。