onSeeking_() {
    this.gapController_.onSeeking();
    const currentTime = this.videoWrapper_.getTime();
    const targetTime = this.reposition_(currentTime);

    const gapLimit = shaka.media.GapJumpingController.BROWSER_GAP_TOLERANCE;

    // We don't need to perform corrective seeks for the playhead range when
    // MediaSource's setLiveSeekableRange() can handle it for us.
    const mightNeedCorrectiveSeek =
        !shaka.media.Capabilities.isInfiniteLiveStreamDurationSupported();

    if (mightNeedCorrectiveSeek &&
        Math.abs(targetTime - currentTime) > gapLimit) {
      let canCorrectiveSeek = false;
      const seekDelay = shaka.device.DeviceFactory.getDevice().seekDelay();
      if (seekDelay) {
        // You can only seek like this every so often. This is to prevent an
        // infinite loop on systems where changing currentTime takes a
        // significant amount of time (e.g. Chromecast).
        const time = Date.now() / 1000;
        if (!this.lastCorrectiveSeek_ ||
            this.lastCorrectiveSeek_ < time - seekDelay) {
          this.lastCorrectiveSeek_ = time;
          canCorrectiveSeek = true;
        }
      } else {
        canCorrectiveSeek = true;
      }
      if (canCorrectiveSeek) {
        this.videoWrapper_.setTime(targetTime);
        return;
      }
    }

    shaka.log.v1('Seek to ' + currentTime);
    this.onSeek_();
  }
Handles when a seek happens on the video.

@private