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