constructor(coord, zoom, ownerDocument, uniqueId) {
    super();

    /** @package @const {!google.maps.Point} The position of the tile. */
    this.coord = coord;

    /** @package @const {number} The zoom level of the tile. */
    this.zoom = zoom;

    /** @package @const {!Element} The tile's DIV element. */
    this.div = ownerDocument.createElement('div');
    this.div.id = uniqueId;

    /** @package {number} The maximum number of tile load retries. */
    this.maxRetries = ee.layers.AbstractTile.DEFAULT_MAX_LOAD_RETRIES_;

    /** @package {google.maps.Size} The size of the tile. */
    this.tileSize;

    /** @package {string} The URL of the tile's source data. */
    this.sourceUrl;

    /** @package {!Blob} The source data for the tile. */
    this.sourceData;

    /** @package {Object} The response headers from the source data request. */
    this.sourceResponseHeaders;

    /**
     * A function that renders the tile into its DIV using the source data.
     * @package {?function(!ee.layers.AbstractTile):undefined}
     */
    this.renderer = function() {};  // No-op by default.

    /** @private {goog.net.XhrIo} The request for the tile's source data. */
    this.xhrIo_;

    /** @private {ee.layers.AbstractTile.Status} The tile's current status. */
    this.status_ = ee.layers.AbstractTile.Status.NEW;

    /** @private {number} The current load retry attempt. */
    this.retryAttemptCount_ = 0;

    /** @private {boolean} Where the tile load is currently be retried. */
    this.isRetrying_ = false;

    /**
     * A message describing the error that caused the tile to fail, if any.
     * @private {string|undefined}
     */
    this.errorMessage_;

    /**
     * Loading start time.
     * @private {number}
     */
    this.loadingStartTs_;
  }
@param {!google.maps.Point} coord The position of the tile.
@param {number} zoom The zoom level of the tile.
@param {Node} ownerDocument The tile's owner document.
@param {string} uniqueId A unique ID for the tile.