async requestSessionInfo_(url, adsParams) {
    const NetworkingEngine = shaka.net.NetworkingEngine;
    const type = NetworkingEngine.RequestType.ADS;
    const context = {
      type: NetworkingEngine.AdvancedRequestType.MEDIATAILOR_SESSION_INFO,
    };
    const request = NetworkingEngine.makeRequest(
        [url],
        NetworkingEngine.defaultRetryParameters());
    request.method = 'POST';
    if (adsParams) {
      const body = JSON.stringify(adsParams);
      request.body = shaka.util.StringUtils.toUTF8(body);
    }

    const op = this.networkingEngine_.request(type, request, context);
    try {
      const response = await op.promise;
      const data = shaka.util.StringUtils.fromUTF8(response.data);
      const dataAsJson =
        /** @type {!mediaTailor.SessionResponse} */ (JSON.parse(data));
      if (dataAsJson.manifestUrl && dataAsJson.trackingUrl) {
        const baseUri = new goog.Uri(url);
        const relativeTrackingUri = new goog.Uri(dataAsJson.trackingUrl);
        this.trackingUrl_ = baseUri.resolve(relativeTrackingUri).toString();
        const now = Date.now() / 1000;
        const loadTime = now - this.streamRequestStartTime_;
        this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.ADS_LOADED,
            (new Map()).set('loadTime', loadTime)));
        const relativeManifestUri = new goog.Uri(dataAsJson.manifestUrl);
        this.streamPromise_.resolve(
            baseUri.resolve(relativeManifestUri).toString());
        this.streamPromise_ = null;
      } else {
        throw new Error('Insufficient data from MediaTailor.');
      }
    } catch (e) {
      if (!this.backupUrl_.length) {
        this.streamPromise_.reject('MediaTailor request returned an error ' +
            'and there was no backup asset uri provided.');
        this.streamPromise_ = null;
        return;
      }

      shaka.log.warning('MediaTailor request returned an error. ' +
          'Falling back to the backup asset uri.');
      this.streamPromise_.resolve(this.backupUrl_);
      this.streamPromise_ = null;
    }
  }
@param {string} url
@param {Object} adsParams
@private