start_() {
    if (this.getAborted()) {
      return;
    }

    var actuallyLoadImage = goog.bind(function(imageUrl) {
      if (this.getAborted()) {
        return;
      }
      this.imageLoader_.addImage(this.id_, imageUrl);
      this.addImageEventListener();
      this.imageLoader_.start();
    }, this);

    var sourceUrl = this.getUrl();
    // Parsing the URL here isn't all that great. It's just a way to not have to
    // pass another parameter from MapLayerOverlay to here containing the same
    // information.
    if (goog.Uri.parse(sourceUrl).getQueryData().containsKey('profiling')) {
      // Fetch the image using XHR so that we can obtain the profile ID from the
      // response headers. Then construct an object URL for the response
      // (possible because we specified 'blob' response type) so that we can
      // load it as an image for the actual map tile display.
      var xhrIo = new goog.net.XhrIo();
      xhrIo.setResponseType(goog.net.XhrIo.ResponseType.BLOB);
      xhrIo.listen(goog.net.EventType.COMPLETE, goog.bind(function(event) {
        this.profileId_ =
            xhrIo.getResponseHeader(ee.data.PROFILE_HEADER) || null;

        // Store the response, but only if it is not an error, because if we did
        // then we would attempt to interpret the error response as an image.
        // This also ensures that the Code Editor can display the error message.
        var objectUrl, ok;
        if (xhrIo.getStatus() >= 200 && xhrIo.getStatus() < 300) {
          try {
            objectUrl =
                goog.module
                    .get('safevalues.index')
                    .unwrapUrl(
                        goog.module
                            .get(
                                'safevalues.index')
                            .objectUrlFromSafeSource(
                                /** @type {!Blob} */ (xhrIo.getResponse())));
            ok =
                (objectUrl !==
                 goog.module
                     .get('safevalues.index')
                     .INNOCUOUS_URL.toString());
          } catch (e) {
            // Browser did not support blob response, or we made a mistake. We
            // will fall back to re-requesting the tile as an image since ok is
            // still null.
          }
        }

        actuallyLoadImage(ok ? objectUrl : sourceUrl);
      }, this));
      xhrIo.listenOnce(
          goog.net.EventType.READY, goog.bind(xhrIo.dispose, xhrIo));
      xhrIo.send(sourceUrl, 'GET');
      // TODO(user): xhrIo.dispose() sooner if this Request_ is aborted
    } else {
      actuallyLoadImage(sourceUrl);
    }
  }
Sends a request to fetch images
@private