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:
Tweet (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かどうかを確認してから送るように修正しています。