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

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

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

2013年11月29日

Bug-org 600117 Implement DOM3 KeyboardEvent.repeat 初回投稿日時: 2013年11月29日23時28分10秒
カテゴリ: Events Mozilla Core Mozilla28 バグ修正
固定リンク: id=2013112900
SNS: (list)

WebKit/Blinkに実装競争で負けちゃいましたが、Geckoにもようやく、KeyboardEvent.repeatを実装しました。

基本的には、各プラットフォームのネイティブキーイベントのリピート情報を参照して値を決定していますが、Xのキーイベントにはこの情報がないため、GDKにも情報はありません。そのため、最後に押されたオートリピート可能なキーのキーコードを記憶しておいて、キーイベントが連続して発生した場合には、trueをセットするようにし、キーコードはフォーカスを失う際に捨てるようにしています。このため、タイトルバーをクリックする等、ネイティブのフォーカス移動イベントが発生する操作を行った場合にも、リピートが途切れるところが、他のプラットフォームとは異なっています。まあ、問題になることはないとは思いますが。

Bug-org 300710 [Mac] No context menus for bookmarks in toolbar folders 初回投稿日時: 2013年11月29日23時38分47秒
カテゴリ: Firefox Mac Mozilla Core Mozilla28 バグ修正
固定リンク: id=2013112901
SNS: (list)

Macでのみ、ブックマークツールバーのフォルダを開いた時に出てくるメニュー(ブックマークアイテム)の上で、コンテキストメニューを出そうとしても、表示されないというバグです。バグ番号から分かるように、かなり古いバグです。

元々、Firefox 2で、Placesを実装中に、Macでのみ、サブメニュー内でコンテストメニューを表示しても、期待通りに動かないので、とりあえず無効化しておこう、という理由でMacでのみ、コンテキストメニューの紐付けが解除されていました。

その後、Bug-org 503639によると、不意に、コンテキストメニューが表示されるようになっていたようですが、『Mac OSにとって、自然なUIではない』という理由で、深い検証を行わずに、再度、コンテキストメニューが表示されないよう、Macでのみ、既にメニューが開かれている場合には、コンテキストメニューは表示しないように修正されていました。

今回、修正するにあたり、ChromeやSafariで動作を確認してみたところ、Chromeではコンテキストメニューが使え、Safariでは使えませんでした。そこで、

  • 修正は容易である
  • Mac OS Xのネイティブアプリにはない挙動だが、Chromeは取り入れている
  • そもそも他のプラットフォームでも、ネイティブアプリにはない挙動

といった理由から、修正を行いました。

Bug-org 940843 Print preview Alt+C doesn't activate "close" button anymore (& similar for other print preview UI with alt-keys) 初回投稿日時: 2013年11月29日23時48分28秒
最終更新日時: 2013年11月29日23時49分17秒
カテゴリ: Events Firefox Mozilla Core Mozilla28 バグ修正
固定リンク: id=2013112902
SNS: (list)

Bug-org 501496のregressionです。プリントプレビューを表示している際に、プレビューされているコンテンツ部分をクリックした後に、UIのアクセスキーが利用できない、というバグです。

コンテンツ部分は、プリントプレビューモードに入る際に、DocShellにキャプチャフェイズのイベントリスナを登録し、コンテンツに処理される前に、イベントを殺すことで、プリントプレビュー内のコンテンツのスクリプト等が動くことを阻止しています。

Bug-org 501496の修正により、この、リスナによってkeydownイベントのpreventDefault()が呼び出されているために、keypressイベントが発生しなくなり、nsEventStateManagerがアクセスキーを処理することができなくなっているのが原因でした。

今回の修正により、keydownイベントのみ、デフォルトイベントグループ、システムイベントグループの両方で、リスナを登録し、keypressイベントを殺してしまわないよう、なおかつ、他のコンテンツがイベントを処理できないように、stopPropagation()のみを呼ぶようにして解決しています。

Bug-org 932168 Bug 906072 completely broke IME context management when password field gets focus 初回投稿日時: 2013年11月29日23時58分35秒
カテゴリ: GTK Mozilla Core Mozilla26 Mozilla27 Mozilla28 バグ修正
固定リンク: id=2013112903
SNS: (list)

Bug-org 906072で、Maemo用のコードが、widget/gtk配下から一掃する際に、nsGtkIMModule.cpp内で、誤って、#ifndef内が消されたり、逆に#ifdefの条件のみが消されたりすることで、GTK版では、Firefox 26以降、パスワードエディタでもIMEが使えるようになっていました。

ギリギリ、ベータ版の間にこのバグが発見されたので、部分的にバックアウトすることで、事なきをえましたが、これはFirefoxコミュニティの、非常に根深い問題を表しています。こんなレベルのバグが、Nightly、Aurora、Beta合わせて、2ヵ月間、日本のテスタの手で発見されていなかったことに、落胆するとともに、力不足を痛感させられました。

2013年11月30日

Bug-org 602787 widget/*Events.h shouldn't be included by other *.h files as far as possible 初回投稿日時: 2013年11月30日00時03分41秒
カテゴリ: Events Mozilla Core Mozilla27 バグ修正
固定リンク: id=2013113000
SNS: (list)

widget/配下のイベントクラスのヘッダファイルが、様々なヘッダファイルにインクルードされているために、ここの変更時にフルビルドに近い、リビルドが必要になるので、できる限り、ヘッダではインクルードしないように修正しようというバグです。

先月のチェックインが最後のチェックインになりましたが、ようやく、検証が終わって、バグの修正完了となりました。

この修正により、技術的に不可能だった修正一件を除けば、現在、イベントクラスのヘッダファイルをインクルードしているヘッダファイルは、ビルド時間にさほど影響のないものだけに限定されています。