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

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

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

2012年9月7日

Bug-org 674477 element with overflow-x:hidden can be scrolled horizontal 初回投稿日時: 2012年09月07日12時17分10秒
カテゴリ: CSS Mozilla Core Mozilla18 バグ修正
固定リンク: id=2012090700
SNS: (list)

overflow-xか、overflow-yの一方がhiddenで、もう一方の方向にスクロール可能な要素で、マウスホイールを使ってhiddenな方向にもスクロールできてしまうことがあるというバグです。

Geckoはマウスホイールでのスクロール対象にはトランザクションの概念を持っていますので、現在のリリースビルドであっても、例えば、overflow-x: hidden;な要素で、先にY軸方向にスクロールし、すぐにX軸方向へのスクロール操作をすると、スクロール対象がその要素に固定されたままになっているので、本来はX軸方向のホイールイベントでの、スクロール対象として算出されないはずのこの要素でスクロールを実行してしまいます。

さらに、D3E WheelEventが実装されたことにより、Macでは、一つのホイールイベントがX軸、Y軸両方向へスクロールすることがあります。

スクロール量を計算する際に、overflow値を考慮して、hiddenなら単にスクロール量をゼロにするように修正してあります。

Bug-org 565245 Intermittent failure in test_bug493251.html | Wrong number events (16 through 21, one short on each) 初回投稿日時: 2012年09月07日12時24分03秒
最終更新日時: 2012年09月07日12時26分37秒
カテゴリ: Mozilla Core Mozilla17 バグ修正
固定リンク: id=2012090701
SNS: (list)

DLBIの一部投入より、このテストのランダムオレンジがトップ3に入ってしまったので、急遽修正が必要になりました。

ランダムオレンジの原因は、テストの開始にonloadイベントを利用していたため、レイアウトが完了する前にマウスイベントを発生させてしまって、望み通りの要素でマウスイベントが受け取れていないことでした。

Bug-org 784246 KeymapWrapper::GuessGDKKeyval() return wrong key for NS_VK_COLON 初回投稿日時: 2012年09月07日12時31分51秒
カテゴリ: Events GTK Mozilla Core Mozilla17 バグ修正
固定リンク: id=2012090702
SNS: (list)

Geckoでは、DOMキーイベントがエディタに届いた時に、ネイティブのショートカットキーに一致するキーかどうか、調べるのですが、その時に、DOMキーコードから、ネイティブキーコードに変換するメソッドにミスが見つかりました。

Fx15以降で:キーに、Linux側の設定で、なんらかのショートカットキーを割り振っている場合には問題があると思います。

Bug-org 784783 [NSInternalInconsistencyException: Invalid message sent to event "NSEvent 初回投稿日時: 2012年09月07日12時47分21秒
カテゴリ: Events Mac Mozilla Core Mozilla18 バグ修正
固定リンク: id=2012090703
SNS: (list)

Bug-org 775414の修正によるregressionです。

command+tabでアプリを切り替えてキーを離すと、最初にcommandキーを押したウインドウに対して、NSFlagsChangedイベントが送信されるのですが、この時に、例外が発生してしまっていました。

この時のNSFlagsChangedイベントはいい加減で、keyCodeの値が、aキーと同じ、ゼロが入っています。NSFlagsChangedはモディファイアキー以外のキーコードが入っていることを前提にしていませんでしたので、通常のキーイベント処理のパスが走り、NSFlagsChangedイベントではアクセスできないプロパティにアクセスしてエラーとなっていたのです。

例外が発生しないようにするだけの修正をこのバグでは入れています。Mozilla17にも近日中に入ると思います。

抜本的な修正は、Bug-org 786956で行う予定です。それまでは、Firefoxでcommand+tabを入力し、他のアプリに切り替えた際には、意味不明なaキーのkeyupイベントが発生したままになります。

Bug-org 786898 If overflow-x or overflow-y causes no scroll only along the axis, the overflowDelta should be zero in some cases 初回投稿日時: 2012年09月07日12時59分43秒
カテゴリ: Firefox Mac Mozilla Core Mozilla18 バグ修正
固定リンク: id=2012090704
SNS: (list)

Bug-org 674477の修正時に出てきた懸念です。overflow-x: hidden;で、横スクロールが行われなかった場合、未使用のデルタ値の残量をwidgetに返す際に、どうしましょっていうバグです。

常に消費してしまうと、Macではジェスチャーに再利用されなくなり、スワイプによる、「戻る」や「進む」が使えなくなってしまいます。逆に、常に残してしまうと、意図せず、「戻る」や「進む」になる可能性があります。

これらの問題を回避するために、スクロールのターゲットの祖先に、その方向へスクロールできる要素があるかどうかを検査し、ある場合は、消費してしまい、無い場合は消費しないように修正しました。

これにより、スクロールしようとしただけなのに「戻る」や「進む」になってしまった、という状況にはならないようになったのではないかと思います。

Bug-org 788401 Avoid warnings in EventUtils.synthesizeWheel() 初回投稿日時: 2012年09月07日13時02分34秒
カテゴリ: Mozilla Core Mozilla18 バグ修正
固定リンク: id=2012090705
SNS: (list)

D3E WheelEvent実装時に、テスト用の追加したユーティリティに、strict warningが出ることが分かったので、これを修正しました。これが、一連のホイールイベント関連の修正では、現在のところ、これが最後になる予定です。

2012年9月14日

Bug-org 789852 Cannot specify text editor to source_view.editor.path if it's located in non-ASCII folder 初回投稿日時: 2012年09月14日10時31分55秒
カテゴリ: Firefox Mozilla18 バグ修正
固定リンク: id=2012091400
SNS: (list)

Firefox Inputへの報告からの修正第二弾です。独りよがりなコメントで意味が分からないものばっかりだったり、自分専用twitterだと誤解してるクレイジーな利用者が多いと評判ですが、今後も確認はしてますので、良質なバグ報告を待っています。

さて、バグの内容ですが、Firefoxでソースビューアに、外部エディタを指定した場合、そのエディタのパスに非ASCII文字が含まれていると、開くのに失敗し、内蔵してるソースビューアで表示されてしまうというものです。

原因は、nsIPrefBranch::GetCharPref()で取得したパスを、nsIFile::InitWithPath()のパラメータに渡していたことです。GetCharPref()ではなく、GetComplexValue()で、nsIFileのインスタンスを直接取得するようにして修正しています。

2012年9月18日

Bug-org 789703 [TSF] nsTextStore::InsertTextAtSelect() should allow readonly lock if dwFlags == TF_IAS_QUERYONLY 初回投稿日時: 2012年09月18日12時29分13秒
カテゴリ: Mozilla Core Mozilla18 TSF Windows バグ修正
固定リンク: id=2012091800
SNS: (list)

ITextStoreACP::InsertTextAtSelection()には、パラメータのフラグによって、テキストを選択位置に挿入することで、選択がどのようになるのか調べるだけの機能があります。MSDNには、このメソッドに関しては、read、write、どちらのロックが必要なのかは明言していないのですが、Geckoは今まで、フラグの内容にかかわらず、read-writeロックが行われているか確認していました。しかし、TSFのログを詳細にとれるようにしてみると、ATOKとの通信時に、ATOKは、readロックのみでアクセスしてきていることに気付きました。それによる実害は不明ですが、writeロックが必要な理由も特に無いので、クエリのみの場合はreadロックのみで動作するように修正しています。

Bug-org 790561 [TSF] Separate InsertTextAtSelection() 初回投稿日時: 2012年09月18日12時33分30秒
カテゴリ: Mozilla Core Mozilla18 TSF Windows バグ修正
固定リンク: id=2012091801
SNS: (list)

nsTextStore::InsertTextAtSelection()は、ITextStoreACP::InsertTextAtSelection()の実装なのですが、nsTextStore::SetText()から利用されてもいて、TIPから呼ばれたのか、内部で呼んだのか、ログでは見分けがつきにくかったり、そもそも、フラグの値によって、動作が大きく変わるメソッドなので、大きめの実装になってしまっているので、分割し、内部での呼び出しで、インターフェースメソッドは呼ばないように変更した方が良いという修正です。