async requestManifest_() {
    const requestType = shaka.net.NetworkingEngine.RequestType.MANIFEST;
    let type = shaka.net.NetworkingEngine.AdvancedRequestType.MPD;
    let rootElement = 'MPD';
    const patchLocationUris = this.getPatchLocationUris_();
    let manifestUris = this.manifestUris_;
    if (patchLocationUris.length) {
      manifestUris = patchLocationUris;
      rootElement = 'Patch';
      type = shaka.net.NetworkingEngine.AdvancedRequestType.MPD_PATCH;
    } else if (this.manifestUris_.length > 1 && this.contentSteeringManager_) {
      const locations = this.contentSteeringManager_.getLocations(
          'Location', /* ignoreBaseUrls= */ true);
      if (locations.length) {
        manifestUris = locations;
      }
    }
    const request = shaka.net.NetworkingEngine.makeRequest(
        manifestUris, this.config_.retryParameters);
    const startTime = Date.now();

    const response = await this.makeNetworkRequest_(
        request, requestType, {type});

    // Detect calls to stop().
    if (!this.playerInterface_) {
      return 0;
    }

    // For redirections add the response uri to the first entry in the
    // Manifest Uris array.
    if (response.uri && response.uri != response.originalUri &&
        !this.manifestUris_.includes(response.uri)) {
      this.manifestUris_.unshift(response.uri);
    }

    const uriObj = new goog.Uri(response.uri);
    this.lastManifestQueryParams_ = uriObj.getQueryData().toString();

    // This may throw, but it will result in a failed promise.
    await this.parseManifest_(response.data, response.uri, rootElement);
    // Keep track of how long the longest manifest update took.
    const endTime = Date.now();
    const updateDuration = (endTime - startTime) / 1000.0;
    this.averageUpdateDuration_.sample(1, updateDuration);

    this.parsedPrftNodes_.clear();

    // Let the caller know how long this update took.
    return updateDuration;
  }
Makes a network request for the manifest and parses the resulting data.

@return {!Promise<number>} Resolves with the time it took, in seconds, to
  fulfill the request and parse the data.
@private