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

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

もずはっく日記(2008年4月)

2008年4月2日

気になる文字列 初回投稿日時: 2008年04月02日20時45分13秒
最終更新日時: 2008年04月02日21時06分22秒
カテゴリ: Opera
固定リンク: id=2008040200
SNS: (list)

以下の文字列って何のためにwingogi_release_desktop.exeに含まれているのでしょうか?

ahem____.ttfAhem

一応、この部分を書き換えてもAcid 3 Testに失敗する訳ではありませんが、では何のためにあるのでしょう?

2008年4月5日

デバッグビルドを利用したテストの推奨 初回投稿日時: 2008年04月05日06時53分41秒
カテゴリ: Bugzilla-jp Firefox Mozilla Core SeaMonkey Thunderbird 雑談
固定リンク: id=2008040500
SNS: (list)

またバグ報告の敷居を上げるなと批判もされそうな気がしなくもないですが、デバッグビルドを利用したデバッグというのも可能な方は是非試していただきたいものです。

デバッグビルドをビルドするにはac_add_options --enable-debugを.mozconfigに追加してビルドします。

デバッグビルドでは通常のリリースビルドやnightlyビルドでビルドされていないコードもビルドされます。ここには、NS_ERRORNS_WARNINGNS_ASSERTION等が含まれます。これらはそのコードの作者が作成時には想定しなかった状況が発生した場合に出力されるようになっています。つまり、何らかのバグを見つけた場合に、それが再現する瞬間にこれらのメッセージを発見すれば、非常に有用な情報となります。また、コードの含まれるファイルや行番号等から、そこに詳しい人間をCVSのログから絞り込むこともできます。

これらのメッセージはWindowsならデバッグビルド起動時に自動的に生成されるプロンプトに、LinuxやMacなら端末から(コマンドから)起動した場合に見ることができます。Macの場合、distdir/dist/MinefieldDebug.app/Contents/MacOSから、./firefoxを実行してください。

2008年4月19日

Bug 6093 [Cocoa] パスワードエディタでAltキーと共に入力する文字が利用できない 初回投稿日時: 2008年04月19日01時40分44秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2008041900
SNS: (list)

IMEが有効なエディタでしかinterpretKeyEventsを呼び出していなかったのが原因でした。また、それを呼び出さなかった場合のコードにも問題があるのでこのバグが再現していたわけですが、それは別のバグで対処することに。

Bug 6107 first-letterが実際の文字の大きさのフレームでない 初回投稿日時: 2008年04月19日01時45分38秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2008041902
SNS: (list)

Bug 6069の変更で、テキストを格納するスペースに下線や上線を引くための領域も確保するようにしていたため、first-letterをfloatした場合にテキストの上端が見た目上揃わない、というバグです。

floatしているfirst-letter擬似要素の場合のみ、実際のグリフのサイズしかスペースを確保しないようにして、常に上線と下線の描画場所をoverflow領域に確保して解決しました。ちなみに、下線等の描画位置は豪快にバグってましたが、このバグの修正で共に修正されています。

Bug 6111 <input type="button">等では IME は無効にすべき 初回投稿日時: 2008年04月19日01時48分45秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2008041903
SNS: (list)

Bug 5961の修正で、各要素がフォーカスを持ったときに編集可能かどうかのフラグを意識するようにしたのですが、そのフラグがinput要素の場合、常にtrueだったことが原因でした。

input要素であってもtype属性によってフラグをきちんと設定するようにし、更にtype属性が変更された時にもそのフラグが更新されるように修正を入れています。

Bug 6054 HTMLのaccesskeyでShiftを押さずに入力する記号を指定すると利用できない 初回投稿日時: 2008年04月19日01時57分39秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2008041904
SNS: (list)

HTMLのaccesskey属性はWindowsとLinuxではAlt+Shiftを同時押ししてアクセスしないといけませんが、Shiftキーが押されているため、Shiftキーを押した状態で入力できる文字しか利用できない、というバグでした。

同様のバグがCtrl++のようなショートカットキー場合にもあり(Windows版はShiftキー無しで;を押すだけでアクセスできていましたが、これもまたバグ)、アクセスキーやショートカットキーのハンドリングを全体的に書き直すことになりました。パッチは76kbにもなり、この時期に入れるには危険すぎるものですが、accessibility上、入れない訳にはいかないのでtrunkには投入済みです。

案の定、大量のregressionを引き起こしていて、現在、全力で対応中です。対応が終わりましたら、変更されたキーハンドリングについて解説したいと思います。

Bug 5901 JISキーボードのCtrl + +(フルキー)でテキストサイズの拡大ができない 初回投稿日時: 2008年04月19日02時01分02秒
最終更新日時: 2008年04月19日02時01分40秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2008041905
SNS: (list)

Bug 6054の修正で修正されました。JISキーボードの場合、厳密にCtrl+Shift+;という組み合わせでしか動作しなくなっています。なお、テンキーの方はShiftが不要なままです。

Bug 6119 JIS キーボードで Cmd++ (Cmd+Shit+;) が効かない 初回投稿日時: 2008年04月19日02時08分15秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2008041906
SNS: (list)

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)

飛んできたバグメールを見ると、もういくつかのバグも修正されているようですが、今把握しているのはこれだけです。

Bug-org 426616 Acid2 chin is 1px too tall in FF3b5 初回投稿日時: 2008年04月19日02時36分13秒
最終更新日時: 2008年04月19日02時36分46秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2008041908
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スペースよりも下側になってしまう場合、次のような処理を行うようにしました。

  1. ascentが1px未満の場合、上線、取消線、下線全ての描画を諦め、太さを0pxに設定
  2. それ以外の場合で、下線位置がおかしい一部のフォントではない場合で、なおかつ下線がdescentのスペースに描画しきれない場合
    1. 下線の太さがmaxDescentよりも大きい場合、下線の太さをmaxDescentの高さに設定
    2. 下線の位置をmaxDescentの下端からサイズ分上の位置に設定(つまり、下線の下端がmaxDescentの下端と一致するように設定)
  3. 取消線の上端がmaxAscentに納まりきらない場合
    1. 取消線の太さがmaxAscentよりも大きい場合、取消線の太さをmaxAscentの高さに設定
    2. 取消線の中央がmaxAscentの中央になるように設定
  4. 上線の太さがmaxAscentより大きい場合、上線の太さをmaxAscentと同じに設定、なお、上線と下線の太さは常に同じ(同じ変数)で、上線の上端は常にmaxAscentの上端です。

なお、MS PGothic等の下線位置に補正が必要なフォントは下線位置を再補正しないため、このバグと同じ理由でAcid2をクリアできません。しかし、これは今のところ修正予定はありません。ユーザにとってはAcid2のクリアよりも、これらのフォントでも読みやすいレンダリングが高速に行われることが重要だからです(今のGeckoの設計では、パフォーマンスを犠牲にしないと修正できないかもしれません。しかし、もし、上記のようなややこしい補正処理をこれらのフォントでも、普段のレンダリングを壊さずにできるコードが書くことができれば、パフォーマンスを犠牲にしなくてもできますが、残念ながら今の私にはそれを考える時間的余裕はありません)。

Bug-org 428846 Using underline hint at painting the strikeout line of Quirks mode 初回投稿日時: 2008年04月19日02時39分47秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2008041909
SNS: (list)

Quirksモードで取消線を描画する時に、描画するメソッドに描画しようとしている線が下線であると、間違えて指示していたというバグです。要するに単なるミスです。このバグの影響で、取消線の位置がstandardsモードに比べて低めに描画されていました。

2008年4月30日

Bug 6054の修正によるregressionで解決しているもの 初回投稿日時: 2008年04月30日00時57分59秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2008043000
SNS: (list)

説明する余力がないのでサマリのみ。

Bug 6005 [Leopard]ことえりが入力中に時々クラッシュする 初回投稿日時: 2008年04月30日01時14分53秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2008043004
SNS: (list)

ことえりのバグなのですが、確定処理中に、再度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をウキウキしながら待ってる方はもーちょっと待っててください。

Bug-org 430650 '^' and '¨' chars don't work in password fields 初回投稿日時: 2008年04月30日01時51分27秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2008043006
SNS: (list)

IMEの状態を制御するようになってから、Linux版のパスワードエディタでデッドキーが使えない、というバグです。なんで今頃報告されるんだという感じですが。

バグの修正方法の説明は割愛しますが、IMEの状態制御に関するコードに根本的に手を入れているので、若干リスキーな修正でした。Linux版のテスタの方はregressionが無いかテストしてください。2~3日中に報告がなければそのままファイナルまで残ることになると思います。