この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、
断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。
Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではない ことに注意してください。
現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。
順次、修正していく予定ですのでしばらくお待ちください。
もずはっく日記(2008年4月)
2008年4月5日
またバグ報告の敷居を上げるなと批判もされそうな気がしなくもないですが、デバッグビルドを利用したデバッグというのも可能な方は是非試していただきたいものです。
デバッグビルドをビルドするにはac_add_options --enable-debug
を.mozconfigに追加してビルドします。
デバッグビルドでは通常のリリースビルドやnightlyビルドでビルドされていないコードもビルドされます。ここには、NS_ERROR
やNS_WARNING
、NS_ASSERTION
等が含まれます。これらはそのコードの作者が作成時には想定しなかった状況が発生した場合に出力されるようになっています。つまり、何らかのバグを見つけた場合に、それが再現する瞬間にこれらのメッセージを発見すれば、非常に有用な情報となります。また、コードの含まれるファイルや行番号等から、そこに詳しい人間をCVSのログから絞り込むこともできます。
これらのメッセージはWindowsならデバッグビルド起動時に自動的に生成されるプロンプトに、LinuxやMacなら端末から(コマンドから)起動した場合に見ることができます。Macの場合、distdir /dist/MinefieldDebug.app/Contents/MacOSから、./firefoxを実行してください。
2008年4月19日
IMEが有効なエディタでしかinterpretKeyEvents
を呼び出していなかったのが原因でした。また、それを呼び出さなかった場合のコードにも問題があるのでこのバグが再現していたわけですが、それは別のバグで対処することに。
regressionで点線や破線の下線を描画する部分のコードがシンプルに壊れていたのが原因でした。
Bug 6069 の変更で、テキストを格納するスペースに下線や上線を引くための領域も確保するようにしていたため、first-letterをfloatした場合にテキストの上端が見た目上揃わない、というバグです。
floatしているfirst-letter擬似要素の場合のみ、実際のグリフのサイズしかスペースを確保しないようにして、常に上線と下線の描画場所をoverflow領域に確保して解決しました。ちなみに、下線等の描画位置は豪快にバグってましたが、このバグの修正で共に修正されています。
Bug 5961 の修正で、各要素がフォーカスを持ったときに編集可能かどうかのフラグを意識するようにしたのですが、そのフラグがinput要素の場合、常にtrueだったことが原因でした。
input要素であってもtype属性によってフラグをきちんと設定するようにし、更にtype属性が変更された時にもそのフラグが更新されるように修正を入れています。
HTMLのaccesskey属性はWindowsとLinuxではAlt +Shift を同時押ししてアクセスしないといけませんが、Shift キーが押されているため、Shift キーを押した状態で入力できる文字しか利用できない、というバグでした。
同様のバグがCtrl ++ のようなショートカットキー場合にもあり(Windows版はShift キー無しで; を押すだけでアクセスできていましたが、これもまたバグ)、アクセスキーやショートカットキーのハンドリングを全体的に書き直すことになりました。パッチは76kbにもなり、この時期に入れるには危険すぎるものですが、accessibility上、入れない訳にはいかないのでtrunkには投入済みです。
案の定、大量のregressionを引き起こしていて、現在、全力で対応中です。対応が終わりましたら、変更されたキーハンドリングについて解説したいと思います。
Bug 6054の修正 で修正されました。JISキーボードの場合、厳密にCtrl +Shift +; という組み合わせでしか動作しなくなっています。なお、テンキーの方はShift が不要なままです。
Mac版です。Bug 6054の修正 で修正されています。
Macではこのバグはなかったのですが、Bug-org 398514 で今まではMacに任せていたショートカットキーのハンドリングをGecko自身でやることにしたために突然発生してしまいました。
Bug 6054の修正で修正された、Bugzilla-jpには無いバグ
初回投稿日時: 2008年04月19日02時15分20秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2008041907
SNS:
(list )
飛んできたバグメールを見ると、もういくつかのバグも修正されているようですが、今把握しているのはこれだけです。
Acid2の顎の部分が1px高くなったというバグです。Bug 6069 のregressionで、下線のために必要なスペースが、ベースラインの下に1pxの空間を空けた後、更に1px下に下線を引くため、最低でもdescentが2px確保されてしまう、というのがバグの原因でした。
問題のフォントではfont-size: 2px;
の時にWindowsではascentが2px、descentが0pxという結果になり、ascent 2pxと下線のための2pxで合計4pxの高さが確保されていたため、顎がのびてしまった訳です。(なぜ2pxじゃなく、1pxしか延びなかったのかはよく分かりませんが、あの複雑なテストをこの繁忙期に見ている余裕はありません……)
そこで、下線位置がdescentスペースよりも下側になってしまう場合、次のような処理を行うようにしました。
ascentが1px未満の場合、上線、取消線、下線全ての描画を諦め、太さを0pxに設定
それ以外の場合で、下線位置がおかしい一部のフォント ではない場合で、なおかつ下線がdescentのスペースに描画しきれない場合
下線の太さがmaxDescentよりも大きい場合、下線の太さをmaxDescentの高さに設定
下線の位置をmaxDescentの下端からサイズ分上の位置に設定(つまり、下線の下端がmaxDescentの下端と一致するように設定)
取消線の上端がmaxAscentに納まりきらない場合
取消線の太さがmaxAscentよりも大きい場合、取消線の太さをmaxAscentの高さに設定
取消線の中央がmaxAscentの中央になるように設定
上線の太さがmaxAscentより大きい場合、上線の太さをmaxAscentと同じに設定、なお、上線と下線の太さは常に同じ(同じ変数)で、上線の上端は常にmaxAscentの上端です。
なお、MS PGothic等の下線位置に補正が必要なフォントは下線位置を再補正しないため、このバグと同じ理由でAcid2をクリアできません。しかし、これは今のところ修正予定はありません 。ユーザにとってはAcid2のクリアよりも、これらのフォントでも読みやすいレンダリングが高速に行われることが重要だからです(今のGeckoの設計では、パフォーマンスを犠牲にしないと修正できないかもしれません。しかし、もし、上記のようなややこしい補正処理をこれらのフォントでも、普段のレンダリングを壊さずにできるコードが書くことができれば、パフォーマンスを犠牲にしなくてもできますが、残念ながら今の私にはそれを考える時間的余裕はありません)。
Quirksモードで取消線を描画する時に、描画するメソッドに描画しようとしている線が下線であると、間違えて指示していたというバグです。要するに単なるミスです。このバグの影響で、取消線の位置がstandardsモードに比べて低めに描画されていました。
2008年4月30日
説明する余力がないのでサマリのみ。
この修正で、日本語版のFirefox3ではCtrl+;でズームインできるようになっています。(たぶん)
一応修正完了してます。10.5では10.4までとキーイベントの仕様が変わったため、これ以外にも色々と問題がありそうです。
Bug 6078の修正 によるregressionです。修正完了してます。
ことえりのバグなのですが、確定処理中に、再度APIで確定させると10.5のことえりがクラッシュするようです。なぜこのようなくどい処理になっていたかというと、CocoaのIMとのインターフェースの設計というのが非常にいいアレな感じで、イベントが発生する、というよりも、プロトコルに用意されたメソッドをアプリ側で実装しておくと、適宜それを呼び出す形になっています。このような仕様なため、ことえりでは確定処理中でしたが、ひょっとすると、他のIMでは確定処理中ではない可能性があるわけです。そういった状況が恐いので確定された状態を保障するために呼んでいたのです。ですが、10.5のことえりは、既に確定処理中なので無視すれば良いだけのはずの状況下でいらない再処理してクラッシュしていたようです。
世界にはざまざまなIMがあって、それぞれの挙動の差がアプリとの相性を産んでしまいます。そういった状況を避けるためにアプリ側が想定するIMの状態をできるだけ確かなものにしておきたいのですが、そのための処理が仇になるとは思いませんでした。
世間的にはGWですが
初回投稿日時: 2008年04月30日01時18分19秒
最終更新日時: 2008年04月30日01時21分29秒
カテゴリ: 雑談
固定リンク: id=2008043005
SNS:
(list )
個人的には軽いデスマーチです。RC1のリリースを止めてるバグ群の中で一番でかいのが私の担当してるキーハンドリングまわりらしいです。RC1をウキウキしながら待ってる方はもーちょっと待っててください。
IMEの状態を制御するようになってから、Linux版のパスワードエディタでデッドキーが使えない、というバグです。なんで今頃報告されるんだという感じですが。
バグの修正方法の説明は割愛しますが、IMEの状態制御に関するコードに根本的に手を入れているので、若干リスキーな修正でした。Linux版のテスタの方はregressionが無いかテストしてください。2~3日中に報告がなければそのままファイナルまで残ることになると思います。
サイドバー
日記内のナビゲーション
Twitter