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

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

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

2015年6月30日

Bug-org 1175392 [e10s] IME Blur may be too late when moving focus from content to chrome due to race condition
初回投稿日時: 2015年06月30日22時51分48秒
カテゴリ: e10s IME Mozilla Core Mozilla41 バグ修正
SNS: (list)

子プロセスのエディタがフォーカスを失い、親プロセスのエディタがフォーカスを得る場合には確実に発生するのですが、chromeプロセスからIMEに対してfocusとblurを通知する順序が、

  1. 子のfocus
  2. 親のfocus
  3. 子のblur

となったり、もっとひどい場合(子プロセスがビジーな場合)には、

  1. 子のfocus
  2. 親のfocus
  3. 親のblur
  4. 親のfocus
  5. 子のblur

といった可能性もあります。これを解決するために、chromeプロセスのIMEStateManagerを通して、nsIWidget::NotifyIME()NOTIFY_IME_OF_FOCUSNOTIFY_IME_OF_BLURを通知するようにし、IMEがフォーカスを持っているかどうかを記録しておくことにしました。

これにより、IMEがフォーカスを持っている場合に再度NOTIFY_IME_OF_FOCUSを通知しようとした場合にはNOTIFY_IME_OF_BLURを先に通知するようなり、後から遅れてくるNOTIFY_IME_OF_BLURや、子プロセスから来る不要な他の通知も破棄するようになりました。

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

bug-org 1175392を含むエントリ