Mozillaサンダーバードジャーニー

皆さんごきげんよう

Mozillaサンダーバードは78バーションに更新され、裏側で大きな変更が行った為、社内のサンダーバードアドオン(Mail-Utility-For-Business)は動くなってしまいました。コードとして使っているサービスは全部XPCOMからで利用され、それはもう非推奨されました。その為、対応が必要で私にその作業を上げました。

対応中で一旦気づきました、元々のアドオンはアイコンが付けていないからちょっと寂しいと思っていました。なので私がアイコンを作ってみたいかなと思っていました。上司にその提案を上げて、許可をもらいました。結果的には以下のイメージ取りです。作り方として私の環境がAdobePhotoshopがないので全部MsPaintで作りました。ちょと醜いかもしりませんが我慢してください。

修正中にも色々なバグが発生してで探しても参照するコードやブログを見つけられなかったのでMozillaのサンダーバードデベロッパーコミュニティに参加するかなと思っていました。そのコミュニティはチャットルームで、質問があればそこに送ればだれかが答えてくれます。参加してとても良かったです。なぜならサンダーバードアドオンの開発に関して全疑問や質問などを教えてもらえるからです。さらにJavascriptのことも(Promise型の使い方とか、JavascriptModules実現とか)教えてもらっています。本当に助かります。それから、むこうの働く時間が違うので返事は午後の4時ぐらいで来ています。日本にはまだ午前でむこうはもう夜の感じです。話の空気についてなんですが英語で話してで全員フレンドリーな人です。今回発生したバグのことですが、コミュニティに相談した所、原因は自分のアドオンじゃなくてMozillaのWebextensionAPIがおかしいのことでした。
そのため、質問に答えてくれたデベロッパーが今回のバグをBugzillaに提出し、対応にあたってくれるとのことでした。それまでの暫定的な対応については以下の通りにしてほしいとの回答を頂いたので、気になるならぜひ見てください。

サンダーバードデベロッパーコミュニティ:https://chat.mozilla.org/
ルーム:Thunderbird Add-on Developers

バグを分かりやすい情報:

・WebExtensionsAPIが 全部asynchronous機能です。機能よるPromise型をリターンされます(Docs:https://thunderbird-webextensions.readthedocs.io/en/78/index.html)

・Promiseは値のインタフェースプロキシーです(Docs:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise)

・AsynchronousFunctionと言うのはコールしたら一つ目なasyncFunctionの下に2つ目なasyncFunctionがコールしても、もし2つ目の機能が一つ目より終わったら実際で2つ目の機能が先に行いますなので一つずつなWebExtensionAPIがawaitをしないと処理順番がおかしくなってしまいます

・Manifest.jsonファイルがアドオンのメタデータが記述されている(Docs:https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/WebExtensions/manifest.json)

・Manifest.jsonに”options_ui”キーを設定したなら、サンダーバードのアドオンマネジャーにアドンのオプションページが現れます。(Docs:https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/options_ui)

バグ内容:

・Options_uiの設定されているHTMLの使っているJavascriptにはWebExtensionsAPIがたまにうまく動いていない。(webAPI Functionにawaitを付けても、ResolveされたPromiseが来ていない)

もらった一時的な修正方法:

・現在のウインドウよりバクグラウンドのほう使ったら動けるようになります。

const browser = window.browser.extension.getBackgroundPage().browser;