元々このバグは、windowlessモードのFlashのプラグインでドイツ語のキーボードレイアウトを使っても、一部のOEMキーでは本来の文字とは異なるものが入力される、というものでした。
Bug 6302の修正でキーボードのネイティブイベントを無加工でプラグインに伝達できるように修正してからGecko側では修正が終わっていましたが、なかなか、対応したバージョンのFlash Playerが出ませんでした。そのため、バグを閉じ忘れていた間にすぐに似たようなバグが再発し、このバグ上で対応することになりました。
新しいバグは、AltGrを使うと入力できない、というもので、また、IMEも未確定文字列が表示できなくなっていました。
原因を調べると、Bug 6302で追加したGecko内部イベントのプラグインイベントが、常にウインドウ最上位のXULのドキュメントに届いていて、コンテンツのプラグインには届いていませんでした。どうも、widget-removalによって、今までは必要のなかった、フォーカスを持つドキュメントへのリダイレクトが新たに必要になっているようです。
このため、一行のみのパッチでシンプルに修正できたので、これからFirefox 5や、Firefox 4でも修正できないか、ドライバに交渉してみる予定です。
fantasaiからの指摘で発覚したバグで、-moz-text-decoration-color
と-moz-text-decoration-style
はtext-decoration
を後から指定した場合にリセットすべきだ、というものです。
CSS3では、text-decoration
はロングハンドから、ショートハンドに変更され、text-decoration-line
プロパティ、text-decoration-style
プロパティ、text-decoration-color
プロパティ、それからblink
値が列挙されることになります。このため、これらのサブプロパティの値は全て、text-decoration: underline;
といった指定があった場合にリセットされなくてはいけません。この修正が間に合わなかったのが、Firefox 5からはバックアウトされた理由です。
このバグの修正で、-moz-text-decoration-line
を実装しました。ただし、値は、underline
、overline
、line-through
のみで、cancel-*
は実装していません。これらの値はCSS 2.1に準拠したtext-decoration
の描画を実装しなくては不可能だからです(GeckoもWebKitもCSS2準拠で、CSS2.1の描画方法にはまだ未対応)。
また、blink
値をショートハンドプロパティに直接指定する、というイレギュラーな仕様はそのままではGeckoは実装できないので、既にCSS3では没になったプロパティをそのままプレフィックス付きで実装しました。-moz-text-blink
で、none
とblink
をその値にとります。
つまり、text-decoration
プロパティはGeckoでは、-moz-text-decoration-line
、-moz-text-decoration-style
、-moz-text-decoration-color
、そして-moz-text-blink
のショートハンドプロパティになりました。
ただし、いくつか、仕様に反した挙動をとることで他のブラウザとの互換性を維持しているので、安心してください。
まず、text-decoration
は、-moz-text-decoration-style
と-moz-text-decoration-color
の値を指定していても無視します。というか、指定されていると不正な値と見なし、その宣言自体が無かったことになります。バグのサマリにあるように、単にこれらの値はtext-decoration
プロパティの宣言があると、その時点で一旦リセットされるだけです。
次に、text-decoration: none none
や、text-decoration: underline none
、text-decoration: none blink
等といった、none
指定時に他の値がある場合には引き続き、無効な値として扱っています。つまり、Webデザイナから見れば、text-decoration
は引き続き、-moz-text-decoration-line
と、-moz-text-blink
のショートハンドプロパティには見えません。
最後に、getComputedStyle()
を利用してtext-decoration
の算出値を取得する場合、本来であればショートハンドプロパティは常に空の文字列を返すべきなのですが、互換性のために今までと同じように、underline
、overline
、line-through
、blink
の組み合わせか、none
を返します。これは明確な仕様違反ですが、おそらく、仕様の方が変更になるのではないかと思います。ただし、-moz-text-decoration-style
や、-moz-text-decoration-color
を使用し、初期値とは異なる値が指定されていた場合、その作者はCSS3のtext-decoration
を理解していることになりますので、この場合には算出値は仕様通り、空の文字列を返すことになります。
最後の一文は、serializeの部分の動作の仕様でした。ただ、懸念があるのでdbaronと相談してみます。