onRegionEvent_(eventName, region, eventTarget = this) {
    // Always make a copy to avoid exposing our internal data to the app.
    /** @type {shaka.extern.TimelineRegionInfo} */
    const clone = {
      schemeIdUri: region.schemeIdUri,
      value: region.value,
      startTime: region.startTime,
      endTime: region.endTime,
      id: region.id,
      timescale: region.timescale,
      eventElement: region.eventElement,
      eventNode: region.eventNode,
    };

    const data = (new Map()).set('detail', clone);
    eventTarget.dispatchEvent(shaka.Player.makeEvent_(eventName, data));
  }
When we fire region events, we need to copy the information out of the
region to break the connection with the player's internal data. We do the
copy here because this is the transition point between the player and the
app.

@param {!shaka.util.FakeEvent.EventName} eventName
@param {shaka.extern.TimelineRegionInfo} region
@param {shaka.util.FakeEventTarget=} eventTarget

@private