const CI = Components.interfaces; const CC = Components.classes; function computeSizeRecursive(file) { file.QueryInterface(CI.nsIFile); if(file.isSymlink()) { return 0; } var size = file.fileSize; if(file.isDirectory()) { var files = file.directoryEntries; while(files.hasMoreElements()) { size += computeSizeRecursive(files.getNext()); } } return size; } Components.utils.import("resource://gre/modules/AddonManager.jsm"); AddonManager.getAllAddons(function(addons) { var addonData = "data:text/html," + "" + "" + "
" + "" + " ID" + " | " + "" + " Name" + " | " + "" + " Size" + " | " + "
" + " " + addon.id + " | " + "" + " " + addon.name + " | " + "" + " " + ((addon.getResourceURI) ? computeSizeRecursive(addon.getResourceURI() .QueryInterface(CI.nsIFileURL).file) : "Unknown") + " | " + "