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

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

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

2009年4月4日

Bug-org 338209 Make spellchecker use thicker wavy underlines instead of dotted underlines. 初回投稿日時: 2009年04月04日10時56分20秒
最終更新日時: 2009年04月04日10時58分37秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2009040400
リンク元: 1件
SNS: (list)

スペルチェッカーの下線は波線の方が一般的だ、というバグです。TSF対応で波線の下線を書く必要があるので、先にこれを修正しました。

WindowsとLinuxではフォントの指定する太さの波線で、Macではさらに倍の太さの点線で描画することで、他のアプリケーションとの互換性を高めています。

早速二つほどフィードバックがあり、週明けに対応予定です。

まずは現在、Bug-org 486708で下線がはみ出さないように出来る限り持ち上げる、というパッチを書いています。これはIMEでも問題になっていたことで、これに対しても効果があります。

2009年4月8日

Bug 6541 [IMM32] IMM32のコードはnsWindowから分離されるべき 初回投稿日時: 2009年04月08日04時33分09秒
最終更新日時: 2009年04月08日04時33分52秒
カテゴリ: Mozilla Core バグ検証中
固定リンク: id=2009040800
リンク元: 0件
SNS: (list)

諸々の理由から、IMM32のコード(平たく言うと、TSFではない、従来のIMEのコード)を他のWindowsの処理から分離して、モジュール化しようとしています。tryserverビルドを用意しているので、テストに参加してもらえると助かります。

このバグでは基本的にはモジュール化しようとしているだけで、挙動自体には(一部の例外を除いて)修正を入れるつもりはありません。つまり、既存のバグはそのままで、regressionがなければOKという状況を期待しています。

Bug 6150 一部のinput(type="text")タグで未確定文字列の下線が表示されないことがある 初回投稿日時: 2009年04月08日04時41分32秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2009040801
リンク元: 0件
SNS: (list)

下線の描画は常にフォントの情報を重視していて、これに従うようにしていましたが、特殊な選択文字列の下線、つまり、スペルチェッカやIMEの未確定文字列用の下線は、フォント情報に従った"綺麗な"描画よりも、フォントのディセンダ内に(出来る限り)収めて、input要素でもきちんと表示されることを優先するように修正しました。

この修正により、大抵のケースでは問題無くなっていると思いますが、あさんのコメントにあるように、まだ一部のフォントでは問題があるようです。しかし、私の修正にバグがない限りは、そのフォントではディセンダすらきちんと表示できていない、という別の問題だと思われますので、別バグとして取り扱うべきだと考え、ひとまずこのバグは閉じました。

2009年4月11日

Bug 6574 マルチディスプレイ環境で、プライマリディスプレイ以外のウインドウからメニュー等を開いても、プライマリモニタに表示される 初回投稿日時: 2009年04月11日10時34分01秒
最終更新日時: 2009年04月11日10時38分22秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2009041100
リンク元: 0件
SNS: (list)

忙しい時に限って、こういう使い物にならないバグが出てくるもんですね。私の環境は、一番よく作業で使うディスプレイがプライマリモニタではないので、ここ最近のビルドは使いにくくて仕方がありませんでした。

で、コメントに書いてあるとおり、セキュリティバグからのregressionなので詳しくは書けないのですが、このセキュリティバグは、自動テストを作ってみたところ、クラッシュするぞ、という話に基づいています。ところが、そのテストが通常利用では、もっと言うなら人間では再現不能なバグなので、おそらくこのテストされているUIがこんな状況を再現していないと思われるのと、Geckoもそんなタイミングで二つのreflowが発生することを想定していないので結果、クラッシュしてるんではないか、と推測されるものでした。

そのクラッシュの原因のひとつは、nsIDeviceContextがネイティブウインドウの生のポインタを持っているのに、nsIWidgetより微妙に長生きすることが直接的な原因のようでした。そこで、セキュリティバグではnsIWidgetが破棄される時に常にnsIDeviceContextを再初期化してポインタをNULLにしていたのですが、nsIDeviceContextを複数のnsIWidgetで共有しているプラットフォームではnsIDeviceContextが現在のディスプレイを取得するのに失敗するようになり、結果、プライマリモニタに常にメニュー等が展開される、という状況になっていました。

nsIDeviceContextに保存するネイティブウインドウへのポインタをNS_NATIVE_WIDGETのものから、NS_NATIVE_WINDOWのものに変更し、更にこれをトップレベルウインドウのものを常に使うようにしています。これで、問題はひとまず隠蔽することができました。

そう、おそらくこの修正は正しくありませんが、十分なものだと思われます。多くのハッカーが本家のバグでコメントをつけてくれていますが、結局、誰もこのバグの本質は理解できていません。ですが、バグの重要性から、このパッチは間もなく1.9.1 branchにも降ろされる予定です。

ちなみにこの変更で、nsIScreenManager::screenForNativeWidgetの仕様が大きな変更を受けています(見た目に変更が無いのがタチ悪いですが)。このメソッドは[noscript]なのでほとんどの拡張作者には関係無いですが、バイナリのモジュールを持つ、特殊な拡張や、Geckoを埋め込んでこのAPIを利用している場合かつ、それがMac上で動作するものである場合は影響を受けます。Cocoaでは、このポインタはNSViewから、NSWindowに変更されているためです。もし不明な点があればIRCかメールで直接私にコンタクトをとって確認してください。

Bug 6580 リンクが正常に表示されない 初回投稿日時: 2009年04月11日10時42分21秒
最終更新日時: 2009年04月11日12時18分00秒
カテゴリ: CSS Mozilla Core バグ報告
固定リンク: id=2009041101
リンク元: 0件
SNS: (list)

詳細はバグを見てください。久しぶりにCSSとDOMのイベントに関わるバグが報告されていて、原因の検証が必要です。ですが、私はいくつか大きなバグを並行して作業している上、これらのリスクが大きいのでできるだけアルファの初期段階で修正を完了する必要があります。そのため今は全く余裕がありません。どなたか検証できる方はお願いします。ちらっと見た限りではおそらくリンクの上に何かの要素のボックスが重なっていて、これが邪魔をしているというサイト側の問題のようなのですが……

2009年4月18日

Bug-org 487601 Crash [@ nsTextStateManager::Init] contenteditable and onfocus removing window 初回投稿日時: 2009年04月18日03時44分01秒
最終更新日時: 2009年04月18日03時45分13秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2009041800
リンク元: 0件
SNS: (list)

シンプルなクラッシュバグです。tryserverでbug-org 460059のパッチをテストしていると、crashtestsでクラッシュしまくるので先に修正が必要になったバグです。

それにしてもTSFが無効なままではnsIWidget::OnIMEFocusChange()が失敗して、問題のコードは走らないはずなんですが、はて?

2009年4月25日

Bug 6529 [TSF] Natural Input で注目文節がどこなのかわからない 初回投稿日時: 2009年04月25日03時18分07秒
カテゴリ: Mozilla Core TSF Windows バグ修正
固定リンク: id=2009042500
リンク元: 0件
SNS: (list)

Natural Inputは未確定文字列の各文節の種類を全て「その他」と通知してくるので、各文節のスタイルを種類で分類して表示するGeckoでは全ての文節が同じように表示されてしまうというバグです。

TSFでは各文節ごとにどのようなスタイルで表示されるべきかという情報を取得できるようになっているので、そのスタイルに従うように修正しました。これにより、TSFを有効にした場合はMS-IMEの表示は他のアプリと同様の表示ができるようになっています。

ですが、Natural Inputのこの仕様は少しまずいと思います。Natural Inputの動作は全般的に、TSFの機能を一通り実装していないと正常に機能しないような実装の仕方をしています。部分的な対応ではうまく機能しない、というのはTIP(IME)というミドルウェアの性質上、好ましい実装方法とは私は思えません。

日本人に利用してもらえるアプリを作っている側からすると、各IMEが正常に機能するようにしなければマトモな製品とは言えないですが、逆にIMEベンダからしても各アプリで正常に機能しないと使ってもらえる製品にはなりえません。今後もサードパーティのIMEベンダがTSF用のTIPを開発していくことになると思いますが、Natural Inputのように奇抜な設計を行うTIPが多いとそのうち、どれかの対応を断念しなくてはいけない状況が生まれてくることになりかねません。

TSFは非常に強力なフレームワークですが、それゆえに自由度が高すぎてこのようなTIPを生んでしまっていると言えます。TIPやTSF対応アプリケーションの実装は先に存在したもの勝ちだと言ってしまって良い、非常に不安定な状況だと思います。

2009年4月28日

今年は豚インフルエンザ 初回投稿日時: 2009年04月28日07時53分43秒
最終更新日時: 2009年04月28日07時57分55秒
カテゴリ: 雑談
固定リンク: id=2009042800
リンク元: 1件
SNS: (list)

去年は崖崩れ。なぜに。

ちなみにバグはたっていない模様。