code: function getIcon(id) {
      id = id || '';
  
      // If the "id" provided is not a string, the only other valid value is a $sce trust wrapper
      // over a URL string. If the value is not trusted, this will intentionally throw an error
      // because the user is attempted to use an unsafe URL, potentially opening themselves up
      // to an XSS attack.
      if (!angular.isString(id)) {
        id = $sce.getTrustedUrl(id);
      }
  
      // If already loaded and cached, use a clone of the cached icon.
      // Otherwise either load by URL, or lookup in the registry and then load by URL, and cache.
  
      if (iconCache[id]) {
        return $q.when(transformClone(iconCache[id]));
      }
  
      if (urlRegex.test(id) || dataUrlRegex.test(id)) {
        return loadByURL(id).then(cacheIcon(id));
      }
  
      if (id.indexOf(':') === -1) {
        id = '$default:' + id;
      }
  
      var load = config[id] ? loadByID : loadFromIconSet;
      return load(id)
        .then(cacheIcon(id));
    }
docs: Actual $mdIcon service is essentially a lookup function
  @param {*} id $sce trust wrapper over a URL string, URL, icon registry id, or icon set id
  @returns {angular.$q.Promise}