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

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

もずはっく日記(2012年11月)

2012年11月30日

Bug-org 808287 Intermittent test_bug386782.html | Editing failed. - got <p>contentEditabEDITED le</p>, expected EDITED <br><p>contentEditable</p> (and 3 more)
初回投稿日時: 2012年11月30日23時55分02秒
カテゴリ: Android Mozilla Core Mozilla19 バグ修正
SNS: (list)

Bug-org 805766の修正により、test_bug386782.htmlのテストがAndroidでのみランダムに発生するようになったというバグです。

このテストは、開いたウインドウでdesignModeのテストを行い、そのウインドウを一端閉じ、再度新しく開いたウインドウでcontentEditableのテストを行うというものです。

原因が分かるキッカケとなったのは、誤って入力されている位置、これが、designModeのテストの最後にキャレットがあった位置と同じということを発見したことでした。designModeのテスト後のキャレットの位置を一文字ずらした状態でテストすると、綺麗に一文字分ずれて、同様の失敗が発生したことから確認がとれました。

Android版のFirefoxは、キャレットが移動した際に、移動した位置をIMEに通知します。ただし、GeckoのGUIスレッドからではなく、AndroidのUIスレッドから通知しています。このため、designModeエディタで最後に発生したキャレット移動が、contentEditableのテストが始まってからIMEに通知され、IMEがキャレット位置で良いという反応がGeckoに戻された際に、Android版のwidgetが新しい方のウインドウ上でその位置に設定しなおす、ということが発生していたわけです。

今までは、Bug-org 805766が修正されるまでは、designModeエディタでこのIMEの通知がそもそも動いていなかったため、隠れていたバグだったわけです。

Android側の修正は私には無理だったので、Android widgetの担当者に任せ、私はnsTextStateManager側が非同期でwidgetにキャレット位置変更等を通知する際に、送信すべきwidgetかどうかを確認してから送るように修正しています。

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

bug-org 808287を含むエントリ