async requestTrackingInfo_(trackingUrl, firstRequest) {
    const NetworkingEngine = shaka.net.NetworkingEngine;
    const type = NetworkingEngine.RequestType.ADS;
    const context = {
      type: NetworkingEngine.AdvancedRequestType.MEDIATAILOR_TRACKING_INFO,
    };
    const request = NetworkingEngine.makeRequest(
        [trackingUrl],
        NetworkingEngine.defaultRetryParameters());

    const op = this.networkingEngine_.request(type, request, context);
    try {
      const response = await op.promise;
      let cuepoints = [];
      const data = shaka.util.StringUtils.fromUTF8(response.data);
      const dataAsJson =
        /** @type {!mediaTailor.TrackingResponse} */ (JSON.parse(data));
      if (dataAsJson.avails.length > 0) {
        if (JSON.stringify(this.adBreaks_) !=
            JSON.stringify(dataAsJson.avails)) {
          this.adBreaks_ = dataAsJson.avails;
          for (const adBreak of this.adBreaks_) {
            for (const nonLinearAd of adBreak.nonLinearAdsList) {
              for (const nonLinearAdResource of nonLinearAd.nonLinearAdList) {
                this.requestStaticResource_(nonLinearAdResource);
              }
            }
          }
          cuepoints = this.getCuePoints();
          this.onEvent_(new shaka.util.FakeEvent(
              shaka.ads.Utils.CUEPOINTS_CHANGED,
              (new Map()).set('cuepoints', cuepoints)));
        }
      } else {
        if (this.adBreaks_.length) {
          this.onEvent_(new shaka.util.FakeEvent(
              shaka.ads.Utils.CUEPOINTS_CHANGED,
              (new Map()).set('cuepoints', cuepoints)));
        }
        this.onEnded_();
        this.adBreaks_ = [];
      }
      if (firstRequest && (this.isLive_ || cuepoints.length > 0)) {
        this.setupAdBreakListeners_();
      }
    } catch (e) {}
  }
@param {string} trackingUrl
@param {boolean} firstRequest
@private