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; } var Application = CC["@mozilla.org/fuel/application;1"].getService(CI.fuelIApplication); var addons = Application.extensions.all; var extDir = Components.classes["@mozilla.org/file/directory_service;1"] .getService(Components.interfaces.nsIProperties) .get("ProfD", Components.interfaces.nsIFile); extDir.append("extensions"); var ios = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); var addonData = "data:text/html," + "" + "" + " " + " " + " Additional Addon Information" + " " + " " + " " + " " + " " + " " + " " + " " + " "; addons.forEach(function(addon) { var ext = extDir.clone(); ext.append(addon.id); addonData += "" + "" + " " + " " + " " + ""; }); addonData += "" + "
" + " ID" + " " + " Name" + " " + " Size" + "
" + " " + addon.id + " " + " " + addon.name + " " + " " + ((ext.exists()) ? computeSizeRecursive(ext) : "Unknown") + "
" + " " + ""; var windowManager = CC['@mozilla.org/appshell/window-mediator;1'] .getService(CI.nsIWindowMediator); var win = windowManager.getMostRecentWindow("navigator:browser"); win.open(addonData, "", "");