parseManifest_(data, finalManifestUri) {
    let manifestData = data;
    const manifestPreprocessor = this.config_.mss.manifestPreprocessor;
    const defaultManifestPreprocessor =
        shaka.util.PlayerConfiguration.defaultManifestPreprocessor;
    if (manifestPreprocessor != defaultManifestPreprocessor) {
      shaka.Deprecate.deprecateFeature(5,
          'manifest.mss.manifestPreprocessor configuration',
          'Please Use manifest.mss.manifestPreprocessorTXml instead.');
      const mssElement =
          shaka.util.XmlUtils.parseXml(manifestData, 'SmoothStreamingMedia');
      if (!mssElement) {
        throw new shaka.util.Error(
            shaka.util.Error.Severity.CRITICAL,
            shaka.util.Error.Category.MANIFEST,
            shaka.util.Error.Code.MSS_INVALID_XML,
            finalManifestUri);
      }
      manifestPreprocessor(mssElement);
      manifestData = shaka.util.XmlUtils.toArrayBuffer(mssElement);
    }
    const mss = shaka.util.TXml.parseXml(manifestData, 'SmoothStreamingMedia');
    if (!mss) {
      throw new shaka.util.Error(
          shaka.util.Error.Severity.CRITICAL,
          shaka.util.Error.Category.MANIFEST,
          shaka.util.Error.Code.MSS_INVALID_XML,
          finalManifestUri);
    }
    const manifestPreprocessorTXml = this.config_.mss.manifestPreprocessorTXml;
    const defaultManifestPreprocessorTXml =
        shaka.util.PlayerConfiguration.defaultManifestPreprocessorTXml;
    if (manifestPreprocessorTXml != defaultManifestPreprocessorTXml) {
      manifestPreprocessorTXml(mss);
    }
    this.processManifest_(mss, finalManifestUri);
    return Promise.resolve();
  }
Parses the manifest XML.  This also handles updates and will update the
stored manifest.

@param {BufferSource} data
@param {string} finalManifestUri The final manifest URI, which may
  differ from this.manifestUri_ if there has been a redirect.
@return {!Promise}
@private