4


5

_編集_賞金に加えて、このバグをFirefox / Geckoのコードベースで修正するために250ドルを支払うつもりです。 ここに問題を再現する簡単なテストプロジェクト(Visual Studio 2008 C#)があります。

_編集#2_このバグを修正するために$ 600を支払います。 問題を再現するサンプルプロジェクトについては上記を参照してください。

HTMLを表示するために、C#WindowsフォームにFirefox(Gecko)ActiveXコントロールがあります。

このFirefox ActiveXコントロールが私たちのフォームにあるとき、私たちのキープレスの2〜3%はそれを通過させません。 あるいは、別のWindowsメッセージが送信されます。

Tabキーを押しながら、3つの通常のWinFormsテキストボックスをタブ移動します。 97%の確率で正しく動作します。 スパイは、WM_KEYDOWNメッセージが正しく送信されたことを通知します。

http://judahhimango.com/images/normaltab.jpg[通常の動作http://judahhimango.com/images/normaltab.jpg]

しかしランダムに、たぶん2〜3%の時間で、タブキー(または他のキー)は正しく処理されません。 スパイは、WM_CHARが代わりに送信されていることを私たちに伝えます:

http://judahhimango.com/images/screwytab.png[odd動作http://judahhimango.com/images/screwytab.png]

奇妙な動作が発生すると、キーがまったく処理されないか、正しく処理されません(タブ文字をサポートしないテキストボックスに '\ t’文字を挿入するなど)。

これはFirefox ActiveXコントロールが私たちのフォームにある場合にのみ発生します。

私たちの質問は:Firefox / Geckoエンジンはこれらの副作用を引き起こす可能性がある何らかのキーボードフックをインストールしますか? さらに良いことに、この問題をどのように解決しますか。

4 Answer


2


WM_CHARメッセージはTranslateMessage呼び出しによって生成されるので、探し始めるのに良い場所はGeckoソースコードのTranslateMessage呼び出しです。

最初のコード例では、関数はmozctl.dllとxul.dllの2つのライブラリによってのみインポートされます。 GeckoFXでも同じエラーが発生すると主張しているので、mozctl.dllを方程式から外すことができます。 これでxul.dllが残るので、Geckoのソースコードを考えると、 `+ widget \ src \ windows \ nsToolkit.cpp +`を調べることをお勧めします。 エンジンが埋め込まれている場合にコードが実行されるかどうかはわかりませんが、実行されると、ライブラリは別のスレッドでまったく新しいメッセージポンプを起動します。

残念ながら、私は自分のマシン上でコードを実行したりコンパイルしたりすることができません(Windows 7 x64、インストールされているMozilla ActiveXコントロールなし)ので、デバッガでこれを検証することはできません。 誰かがそれをさらに突き止めるのに役立つことを願っています。


1


根本的な問題は、Mozillaが他のアプリケーションに埋め込まれていると、内部イベントを送出するときに誤ってWindowsメッセージを送り出すことです。 Mozillaはイベントシステムを使ってスレッド間の調整やスレッドでの遅延処理のスケジュールを設定します( nsIThread、http://mxr.mozilla.org/mozilla-central/を参照) source / xpcom / threads / nsIEventTarget.idl [nsIEventTarget])。 たとえば、Webページに多数のアクティブなXMLHTTPリクエストが埋め込まれている場合、Mozillaはそのイベントディスパッチインターフェイスを使用してイベントをJavaScriptにディスパッチし、副作用としてWindowsメッセージを送ります。 Mozillaイベントが完全に送出されると、メインイベントループに戻ります。

MozillaがWindowsメッセージを送信するとき、アプリケーションのイベントループによって行われる余分な処理(IsDialogMessage()、TranslateMessage()、PreTranslateMessage())、またはその他の前処理はMozillaがこの状態になったときにスキップされません。 そのため、ダイアログのナビゲーションに使用されずにタブキーが文字として挿入されたり、キーボードホットキーが散発的に無視されたり、カスタムメッセージの前処理が散発的にスキップされたりすることがあります。 たとえば、Outlook 2007/2010の「作成」画面では、キーボード入力を処理するためのカスタムメッセージの前処理に依存しているため、キーストロークが散発的に失われます。

この問題を解決するパッチについてはhttps://bugzilla.mozilla.org/show_bug.cgi?id=582790を参照してください。


1


私はSnoop FreeとPSM Anti-Keyloggerを持っています。 そのうちの一つはfirefoxがKeyboard Hookをインストールしようとしていることを検出しました。 Mozilla / Firefoxファイルxul.dllがキーボードフックでインストールを試みます。 拒否されました。


0


相互運用性のすべてを自分で実装したことに気づきました。 GeckoFXプロジェクトでこれを試しても同じエラーが出るかどうか確認できますか。 私は職場でこのプロジェクトを使用していますが、まだ問題は発生していません。