code: function (url) {
              var image = this._image = new Image();
              var _this = this;
  
              if (this.crossOriginPolicy) {
                  image.crossOrigin = this.crossOriginPolicy;
              }
              if (this.ajaxWithCredentials) {
                  image.useCredentials = this.ajaxWithCredentials;
              }
  
              $.addEvent(image, 'load', function () {
                  /* IE8 fix since it has no naturalWidth and naturalHeight */
                  _this.width = Object.prototype.hasOwnProperty.call(image, 'naturalWidth') ? image.naturalWidth : image.width;
                  _this.height = Object.prototype.hasOwnProperty.call(image, 'naturalHeight') ? image.naturalHeight : image.height;
                  _this.aspectRatio = _this.width / _this.height;
                  _this.dimensions = new $.Point(_this.width, _this.height);
                  _this._tileWidth = _this.width;
                  _this._tileHeight = _this.height;
                  _this.tileOverlap = 0;
                  _this.minLevel = 0;
                  _this.levels = _this._buildLevels();
                  _this.maxLevel = _this.levels.length - 1;
  
                  _this.ready = true;
  
                  // Note: this event is documented elsewhere, in TileSource
                  _this.raiseEvent('ready', {tileSource: _this});
              });
  
              $.addEvent(image, 'error', function () {
                  // Note: this event is documented elsewhere, in TileSource
                  _this.raiseEvent('open-failed', {
                      message: "Error loading image at " + url,
                      source: url
                  });
              });
  
              image.src = url;
          }
docs: Responsible for retrieving, and caching the
  image metadata pertinent to this TileSources implementation.
  @function
  @param {String} url
  @throws {Error}