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," + "" + "" + " " + " " + " Additional Addon Information" + " " + " " + " " + " " + " " + " " + " " + " " + " "; addons.forEach(function(addon) { addonData += "" + "" + " " + " " + " " + ""; }); addonData += "" + "
" + " ID" + " " + " Name" + " " + " Size" + "
" + " " + addon.id + " " + " " + addon.name + " " + " " + ((addon.getResourceURI) ? computeSizeRecursive(addon.getResourceURI() .QueryInterface(CI.nsIFileURL).file) : "Unknown") + "
" + " " + ""; var windowManager = CC['@mozilla.org/appshell/window-mediator;1'] .getService(CI.nsIWindowMediator); var win = windowManager.getMostRecentWindow("navigator:browser"); win.open(addonData, "", ""); });