async savePreload_(saveLivePosition = false) {
    let preloadManager = null;
    if (this.manifest_ && this.parser_ && this.parserFactory_ &&
        this.assetUri_ && this.config_) {
      let startTime = this.video_.currentTime;
      if (this.isLive() && !saveLivePosition) {
        startTime = null;
      }
      // We have enough information to make a PreloadManager!
      preloadManager = await this.makePreloadManager_(
          this.assetUri_,
          startTime,
          this.mimeType_,
          this.config_,
          /* allowPrefetch= */ true,
          /* disableVideo= */ false,
          /* allowMakeAbrManager= */ false);
      this.createdPreloadManagers_.push(preloadManager);
      if (this.parser_ && this.parser_.setMediaElement) {
        this.parser_.setMediaElement(/* mediaElement= */ null);
      }
      preloadManager.attachManifest(
          this.manifest_, this.parser_, this.parserFactory_);
      preloadManager.attachAbrManager(
          this.abrManager_, this.abrManagerFactory_);
      preloadManager.attachAdaptationSetCriteria(
          this.currentAdaptationSetCriteria_);
      preloadManager.start();
      // Null the manifest and manifestParser, so that they won't be shut down
      // during unload and will continue to live inside the preloadManager.
      this.manifest_ = null;
      this.parser_ = null;
      this.parserFactory_ = null;
      // Null the abrManager and abrManagerFactory, so that they won't be shut
      // down during unload and will continue to live inside the preloadManager.
      this.abrManager_ = null;
      this.abrManagerFactory_ = null;
    }
    return preloadManager;
  }
@param {boolean=} saveLivePosition
@return {!Promise<?shaka.media.PreloadManager>}
@private