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

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

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

2009年7月2日

Bug-org 501608 menu popup sounds are played at showing the autoscrolling popup 初回投稿日時: 2009年07月02日05時33分11秒
カテゴリ: Firefox Mozilla Core バグ原因判明 バグ報告
固定リンク: id=2009070200
SNS: (list)

オートスクロールのマーカーが表示されるときに、メニューポップアップ時のシステム音が再生されてしまう、という問題です。Fx3.5でリリース後に発見された一発目の私のregressionでしようか。

現在はmenupopup要素をメニュー用のポップアップ、ツールチップならtooltip要素、それ以外ならpanel要素と、使い分けているのですが、少なくともmenupopuppanelは昔は、popup要素という要素で兼用されていたようです。不確かなのは、それを明言しているところが見付からなかったためですが、XULのCSSファイルに残っているコメントや、MDCの状況からすると、こう推測されます。

そして互換性のためにpopup要素はmenupopup要素と同等に扱われますが、オートスクロールのマーカーはレガシーなpopup要素を使ってしまっているのがこのバグの原因のようです。ひとまず、panel要素を使うようにするパッチを提出しています。

Bug-org 486778 Spell checker's wavy line is sometimes drawn through misspelled words 初回投稿日時: 2009年07月02日05時46分44秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2009070201
SNS: (list)

波線を引くときに、波線の中央を基準に上下方向の位置を決めていたのですが、それだと欧文のフォントでは重なりすぎて見にくい場合がある、というバグです。

波線の上端を通常の下線の上端に揃えることでこの重なってしまう問題はほぼ修正されるはずですが、それでは日本語フォントの場合にinput要素からはみ出してしまうことが多くなります(波線はTSFで多用されるので日本語にとっても重要)。

そこで、nsTextFrameThebesから選択範囲用の下線を描画する時には利用できるベースラインから、行の下端までの高さをヒントとして渡すことにしました。もし、フォントの下線指定位置に波線を描画しようとしてはみ出す場合は、最高で、ベースライン位置まで持ち上げるようにするためです。

しかし、ここにはひとつ問題があり、nsTextFrameThebesからは行の情報が正確には分かりません。行の詳しい情報はレイアウト中にのみ構築され、描画時には不要になっているのでデータは破棄されているためです。

ですが、それで正確な行の高さが分からないのは、vertical-alignが絡む、複雑なレイアウトをしている場合の話であって、多くの場合に問題となるinput要素やtextarea内では発生しない問題です。また、複雑なレイアウトを行っている場合、input要素に比べて余裕があるはずなので、HTMLエディタで問題が発生する状況は無いのではないか、という前提において、シンプルな行高推測を行って、ヒントとすることにしました。

line-height値を含めて行高を計算して、それが文字サイズに対して1倍以上ならそこから求められた高さをヒントとして利用します。それ以外の場合はどのみちはみ出してしまうので、1倍時の高さをヒントとして渡すように修正しています。

もしこの修正によってTSFモードで波線がはみ出してしまう場合を見つけたら、bugzilla-jpに報告をお願いします。

2009年7月4日

Bug-org 502124 Firefox doesn't process Content-Style-Type of "text/ccs" (sic) 初回投稿日時: 2009年07月04日05時30分50秒
カテゴリ: CSS Mozilla Core
固定リンク: id=2009070400
SNS: (list)

<meta http-equiv="Content-Style-Type" content="text/ccs"/>という指定があると、インラインのスタイル指定が無効になる、というバグ報告です。念のために説明しておくと、このHTMLドキュメントで使用されるスタイルシートの形式は、(別途指定がない限り)text/ccsという形式であると宣言しています。つまり、別途、指定することができないstyle属性に記述したスタイルシートはtext/ccsという、未知のスタイルシートであると宣言されています。もちろん、これはinvalidであるべきです。

報告文を見ると妙に報告者が興奮している様子です。その理由はセキュリティに関わるような内容が強調されないのが問題だ、ということのようですが、そういうのはHTMLで適切にマークアップしていればスタイルシート無しでもきちんと強調表示される訳で、全く以て的外れな指摘でしょう。CSSに頼った、見た目に依存したサイトを作るとこういうことになるという良い例です。

それにしてもこういうバグを見ると、さすがはGeckoだなぁと感じます。相変わらずこういう未来に禍根を残しかねない拡大解釈は行わない、こういう所はGeckoの美徳だと思います。ですが、厳格なだけじゃなく、ある程度は現実のWebサイトにも歩み寄っている部分もあり、そのバランスが絶妙なのが評価されているひとつの理由かと思います。

それに対してWebKitがCSSじゃないと明言しているものをCSSであるものとしてレンダリングしてしまっていることを非常に残念に思います。WebKitは仕様に厳格な方針だと思っていたので。もし、将来、text/ccsと名乗るスタイルシートが出現した時、現在のWebKitは知ったかぶりでレンダリングを試みてしまうことになります。

2009年7月5日

Bug-org 491712 Sporadic failure in test_wheeltransaction.xul 初回投稿日時: 2009年07月05日02時12分09秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2009070500
SNS: (list)

自動テストのtest_wheeltransaction.xulがまだランダムに失敗する、というバグです。今度こそ全部修正できた、かな??

どうにもUIの自動テストはテスト複雑になりがちで、そこにバグがあるとこうなって、tinderboxのチェックイン可能タイミングをどんどん削ってしまうので、なんだかデメリットも大きいですね。運用ルールの問題なのかもしれませんが。

2009年7月9日

Bug-org 498079 Firefox has huge problems to show the Default Browser dialog on the screen 初回投稿日時: 2009年07月09日14時34分59秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2009070900
SNS: (list)

WindowsでFirefoxを起動した時に、デフォルトブラウザにするかどうか問い合わせるダイアログが表示される時、システム音が鳴るようになりましたが、その再生のために数秒固まることがある、というバグです。

おそらくほとんどのシステムでは問題無く、報告者のRiaも特定のPCでしか再現できない模様です。::PlaySoundWSND_ASYNCをつけて呼び出しているので、再生が始まる前に直ちに呼び出しもとに処理が返ってくるはずなのですが、どうも音を再生する手前、つまり渡したシステム音名から実際のファイルパスに変換する作業で固まることがあるのではないか、と推測されます。

::PlaySoundWの呼び出し自体を別スレッドで行うようにすることで解消しています。

Riaの特定のPCでの問題なのか、そうでないのかは不明ですが、もし問題が多くの環境で発生するのであればFx3.5.xへの投入も考えた方が良いと思いますが、今のところ分かりません。もし、この問題で困っている人が居れば、本家のバグにコメントをつけるなり、日本語で書きたい場合はbugzilla-jpに新しくバグをたてて、その旨を書き込んでください。ある程度、困っている人が確認できたらドライバを説得しやすいかと思いますのでよろしくお願いします。

Bug-org 502799 add new nsISound method for the event sounds 初回投稿日時: 2009年07月09日14時43分07秒
最終更新日時: 2009年07月10日08時51分19秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2009070902
SNS: (list)

nsISoundplaySystemSoundに、_moz_で始まる、あらかじめ定義されたイベント名を指定するとそのイベントに対応したシステム音が鳴るものの、APIとしての使い勝手が悪く、新しいイベント名を追加すればするほど文字列のチェックという無駄な処理コストがかかるので、イベント用のシステム音再生専用のAPIを追加しようというバグです。

nsISound::playEventSoundとして実装が終わりました。今後、新しいイベントはこちら側でしか追加されません。また、nsISound::playSystemSound_moz_で始まる文字列を渡すと、デバックビルドではwarningを出力するようになっています。アドオン作者の方でこれを利用していた方は、trunkではnsISound::playEventSoundを使用するようにしてください(互換性のために、playSystemSoundでのイベント音再生も当面はサポートされる予定ですが、何かで突然打ち切る可能性はあります。また、パフォーマンス上もplayEventSoundの方が好ましいのでこちらを利用してください)。

また、この修正の煽りを受けて、nsPIPromptServiceにも影響が出ています。Gecko埋め込みブラウザを作っている方は注意してください。ただし、こちらも互換性のために当面は従来通りの値も利用可能です。

これらを明文化するために、MDCにはnsISoundのドキュメントと、nsPIPromptServiceのドキュメントを新規に書き下ろしていますのであわせて参照してください。

む。定数の名前でミススペル指摘されました。修正入れます。

秀丸にも(OfficeとかFxみたいな)スペルチェッカー内蔵して欲しいですね。そろそろエディタ、乗り換え時でしょうか。

Bug-org 502273 contentEditable is disabled if an attribute is removed from the node 初回投稿日時: 2009年07月09日14時50分39秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2009070903
SNS: (list)

contentEditabletrueの要素の何か別の属性を削除しただけで内容が編集できなくなる、というバグです。

Bug-org 460568の修正の時のミスで、条件付でレビューにパスした際に、その条件となった修正に間違いがあってこのような変なバグが出てしまいました。

近日中にFx3.5での修正も申請します。

2009年7月14日

Bug-org 248380 No sound on clicking links 初回投稿日時: 2009年07月14日04時39分11秒
最終更新日時: 2009年07月14日04時43分01秒
カテゴリ: Firefox IE Mozilla Core バグ検証中
固定リンク: id=2009071400
SNS: (list)

前から気になっていたこのバグに着手しています。

今残っている問題は、Bug-org 503890で分かった、非表示のドキュメントの読み込みにも反応して音を鳴らしてしまうという点ぐらいでしょうか。

一応、音の鳴るタイミングはIE8の動作をもとに色々と検証しましたが、全く同じようにしようとすると無駄に泥臭いコードを書きまくらないといけないので、Fxのtoolkitの設計にあわせて無理なく再生されるようにしています。IE8との分かっている違いは、

  • ユーザがリロードを指示した時にも音が鳴る
  • アプリケーションの起動時の読み込みに対しても音が鳴る
  • 外部アプリケーションを呼び出すリンク(例えばmailto:とか)のクリック時にナビゲーション開始音が鳴らない
  • ナビゲーションの終了音は完全にコンテンツが読み込み終わってから鳴る

といった感じです。IE8で検証していると、IEの仕様にもいくつか疑問点があって、全体的にナビゲーションの開始音は名前に反して、リンクのクリック音という性格が異様に強いのですが、同一ページ内での移動のためのリンクや、javascriptのリンクのクリックでは音がならなかったり、ユーザがリロードした時には音が鳴らないのに、javascriptからリロードした場合には鳴る、といった逆のパターンも見受けられます。

現在提案中のパッチではbrowser要素にenablenavigationsound属性を付けておかないと音が鳴らないように制限しています。これは、DOM Inspector等、browser要素を使っている拡張の挙動を変えないように、という措置ですが、逆にFxに対して拡張が時前でbrowser要素を追加しているような場合(Split Browserあたり?)は音が出ないという副作用が予想されます。

また、これらの音は純粋なシステム音ではなく、エクスプローラという、別のアプリケーションの設定にしかすぎないので、prefでエクスプローラの設定を参照するか、ファイルを直接指定するか、という二つの選択肢を入れています。デフォルトでは無音ですが、IEからの乗り換え組のために、IEの設定インポート時に設定を書き換えられないか調査中です。

このパッチをテストしていると、音が出ることがだんだん当たり前になってきてしまって、trunkビルドに戻るとすごく違和感があります。このアクションを行うとこの音が鳴るはず、と体が慣れてしまっている状態で鳴らないので、かなり寂しい感じです。ひょっとすると、IEユーザの取り込みに失敗した例の中にはこの違和感が影響したケースもあるのではないかと思わされます。

2009年7月15日

今日の(愉快な)誤変換 初回投稿日時: 2009年07月15日14時25分02秒
カテゴリ: 雑談
固定リンク: id=2009071500
SNS: (list)

剃髪熱(低発熱) by ATOK 2009

2009年7月16日

Bug 2712 ポップアップウィンドウにマウス自動追従が効かない #3 初回投稿日時: 2009年07月16日00時58分23秒
カテゴリ: Mozilla Core バグ修正
固定リンク: id=2009071600
SNS: (list)

最初のドラフトのパッチから10ヶ月もかかってしまいましたが、ようやく修正です。まだ自動テストに問題が見付かっているので作業は残っていますが。

それにしても、こういうモジュール間をまたぐ修正で、このバグぐらいの重要度だと、作業できる人はやはり皆無という感じでしたね。結論から行くと、批判された当時に手を付けていても修正できなかったでしょう。なにしろ、今の知識でも手探りだったというのが正直なところですので。そんな訳で、ここまで修正を遅らせたのは開発効率だけを考えるなら、正解だったかもしれません。

今回の修正範囲ならXULの関係者であれば、Win32への依存部分が少ないのでなんとかできそうですが、そういうレベルの人達が作業するには費用対効果がやはり小さい感じはします。

しかし、落ち着いて考え見ると、bugzilla-jpでは確か最大でも5人程度しか修正要望出している人は居なかった(今はvoteシステムを無効化しています)ので、本家とあわせても20人ぐらいしか要望を出していなかったことになります。そんな要望を飲んだというのはある意味すごい話かも……普通の営利企業でこういう修正やると怒られそうですね。

2009年7月22日

今日の(愉快な)誤変換 #2 初回投稿日時: 2009年07月22日12時22分37秒
カテゴリ: 雑談
固定リンク: id=2009072200
SNS: (list)

真蛸の程度(まだこの程度) by ATOK 2009

2009年7月31日

Bug-org 501608 menu popup sounds are played at showing the autoscrolling popup #2 初回投稿日時: 2009年07月31日16時19分50秒
カテゴリ: Firefox Mozilla Core バグ修正
固定リンク: id=2009073100
SNS: (list)

Fx3.5のregressionです。オートスクロールのマーカーが表示されるときに、メニューが開くシステム音が鳴ってしまう、というバグです。

マーカーに、既に廃止されているpopup要素を使っているのが問題でした。popup要素は現在、メニュー目的ならmenupopup、ツールチップならtooltip、それ以外ならpanel要素を使うように分割され、互換性のためにpopup要素はmenupopup要素と同等に扱われています。もし、何らかの拡張でメニューが開いていないのに、何らかのポップアップによってメニューが開かれる音が鳴る場合、同じバグである可能性があるので、その拡張作者に連絡してあげてください。