code: function (deps, options) {
    deps = deps || {};
    options = options || {};
    if (!deps.engine) throw new Error('engine is required');
    if (!deps.mapModel) throw new Error('mapModel is required');
    if (!deps.infowindowModel) throw new Error('infowindowModel is required');
    if (!deps.tooltipModel) throw new Error('tooltipModel is required');
  
    this._engine = deps.engine;
    this._mapModel = deps.mapModel;
    this._infowindowModel = deps.infowindowModel;
    this._tooltipModel = deps.tooltipModel;
    this._showEmptyFields = !!options.showEmptyFields;
  
    this._cartoDBLayerGroupView = null;
    this._cartoDBLayerModel = null;
    this.currentFeatureUniqueId = null;
  
    this._mapModel.on('change:popupsEnabled', this._onPopupsEnabledChanged, this);
  }
docs: Manages the infowindows for a map. It listens to events triggered by a
  CartoDBLayerGroupView and updates models accordingly