1 /* See license.txt for terms of usage */ 2 3 define([], function() { 4 "use strict"; 5 6 // ********************************************************************************************* // 7 // Constants 8 9 var Ci = Components.interfaces; 10 var Cc = Components.classes; 11 var Cu = Components.utils; 12 13 var Xpcom = {}; 14 15 // ********************************************************************************************* // 16 // XPCOM Utilities 17 18 /** 19 * Returns required XPCOM service 20 * @param {Object} cName Name of the service. 21 * @param {Object} ifaceName Name of the required interface 22 */ 23 Xpcom.CCSV = function(cName, ifaceName) 24 { 25 try 26 { 27 // if fbs fails to load, the error can be Cc[cName] has no properties 28 return Cc[cName].getService(Ci[ifaceName]); 29 } 30 catch (exc) 31 { 32 Cu.reportError(cName + "@" + ifaceName + " FAILED " + exc + " " + 33 (exc.stack ? exc.stack : "")); 34 35 if (!Cc[cName]) 36 Cu.reportError("Xpcom.CCSV; No Components.classes entry for " + cName); 37 else if (!Ci[ifaceName]) 38 Cu.reportError("Xpcom.CCSV; No Components.interfaces entry for " + ifaceName); 39 } 40 }; 41 42 /** 43 * Returns a new instance of required XPCOM component 44 * @param {Object} cName Name of the component. 45 * @param {Object} ifaceName Name of required interface. 46 */ 47 Xpcom.CCIN = function(cName, ifaceName) 48 { 49 try 50 { 51 return Cc[cName].createInstance(Ci[ifaceName]); 52 } 53 catch (exc) 54 { 55 Cu.reportError(cName + "@" + ifaceName + " FAILED " + exc); 56 57 if (!Cc[cName]) 58 Cu.reportError("Xpcom.CCIN; No Components.classes entry for " + cName); 59 else if (!Ci[ifaceName]) 60 Cu.reportError("Xpcom.CCIN; No Components.interfaces entry for " + ifaceName); 61 } 62 }; 63 64 /** 65 * Queries passed object for required interface. 66 * @param {Object} obj Object to query an interface for. 67 * @param {Object} iface Required interface. 68 */ 69 Xpcom.QI = function(obj, iface) 70 { 71 try 72 { 73 return obj.QueryInterface(iface); 74 } 75 catch (exc) 76 { 77 Cu.reportError(cName + "@" + ifaceName + " FAILED " + exc); 78 } 79 }; 80 81 // ********************************************************************************************* // 82 83 return Xpcom; 84 85 // ********************************************************************************************* // 86 }); 87