拡張アンインストール時になんらかの処理を行う

 古くから拡張を作られている方で拡張アンインストール時になんらかの処理を行うために、ObserverService の通知を利用されている方も少なくないかと思います。またあるいは FUEL を利用して簡便に拡張のアンインストールを検出している方も少なくないと思います。
 これらの2つの方法が使えなくなる予定になっています。最新の方法ではアドオンマネージャを使って、拡張の削除を検出するようになっています。

 拙作 Hütte Nippon では、ほぼサンプル通り以下のようなコードになっています。

(function(){
  let Cc=Components.classes;
  let Ci=Components.interfaces;
  let tm;
  function rmStringValue(pentry){
    try {
      Cc["@mozilla.org/preferences-service;1"]
        .getService(Ci.nsIPrefBranch).deleteBranch(pentry);
    }catch(e){
      return false;
    }
    return true;
  };
  function clearProfile(){
    rmStringValue('extensions.weather.prefecture');
    rmStringValue('extensions.weather.region');
    rmStringValue('extensions.weather@avidya.ne.jp.install-event-fired');
  };
  function init(){
    window.clearTimeout(tm);

    let listener = {
      onUninstalling: function(addon) {
        if (addon.id == "weather@avidya.ne.jp") {
          clearProfile();
        }
      },
      onOperationCancelled: function(addon) {
        if (addon.id == "weather@avidya.ne.jp") {
          beingUninstalled = (addon.pendingOperations & AddonManager.PENDING_UNINSTALL) != 0;
        }
      }
    }

    Components.utils.import("resource://gre/modules/AddonManager.jsm");
    AddonManager.addAddonListener(listener);
  }
  tm=window.setTimeout(init,500);
})();

 なお、Hütte Nippon のライセンスを以前から MIT License に変更しています。コピーして使うなり、参考にするなり自由にご利用ください。
 また Hütte Nippon の全ソースコードは github にて公開しています。