Index: goog/net/tmpnetwork.js =================================================================== --- goog/net/tmpnetwork.js (revision 2519) +++ goog/net/tmpnetwork.js (working copy) @@ -103,44 +103,26 @@ var channelDebug = new goog.net.ChannelDebug(); channelDebug.debug('TestLoadImage: loading ' + url); var img = new Image(); - img.onload = function() { - try { - channelDebug.debug('TestLoadImage: loaded'); - goog.net.tmpnetwork.clearImageCallbacks_(img); - callback(true); - } catch (e) { - channelDebug.dumpException(e); - } + var timer = null; + var createHandler = function(result, message) { + return function() { + try { + channelDebug.debug('TestLoadImage: ' + message); + goog.net.tmpnetwork.clearImageCallbacks_(img); + goog.global.clearTimeout(timer); + callback(result); + } catch (e) { + channelDebug.dumpException(e); + } + }; }; - img.onerror = function() { - try { - channelDebug.debug('TestLoadImage: error'); - goog.net.tmpnetwork.clearImageCallbacks_(img); - callback(false); - } catch (e) { - channelDebug.dumpException(e); - } - }; - img.onabort = function() { - try { - channelDebug.debug('TestLoadImage: abort'); - goog.net.tmpnetwork.clearImageCallbacks_(img); - callback(false); - } catch (e) { - channelDebug.dumpException(e); - } - }; - img.ontimeout = function() { - try { - channelDebug.debug('TestLoadImage: timeout'); - goog.net.tmpnetwork.clearImageCallbacks_(img); - callback(false); - } catch (e) { - channelDebug.dumpException(e); - } - }; - goog.global.setTimeout(function() { + img.onload = createHandler(true, 'loaded'); + img.onerror = createHandler(false, 'error'); + img.onabort = createHandler(false, 'abort'); + img.ontimeout = createHandler(false, 'timeout'); + + timer = goog.global.setTimeout(function() { if (img.ontimeout) { img.ontimeout(); } Index: goog/net/channelrequest.js =================================================================== --- goog/net/channelrequest.js (revision 2519) +++ goog/net/channelrequest.js (working copy) @@ -1037,10 +1037,20 @@ goog.net.ChannelRequest.prototype.imgTagGet_ = function() { var eltImg = new Image(); eltImg.src = this.baseUri_; + eltImg.onload = eltImg.onerror = goog.bind(this.imgTagComplete_, this); this.requestStartTime_ = goog.now(); this.ensureWatchDogTimer_(); }; +/** + * Callback when the image request is complete + * + * @private + */ +goog.net.ChannelRequest.prototype.imgTagComplete_ = function() { + this.cancelWatchDogTimer_(); + this.channel_.onRequestComplete(this); +} /** * Cancels the request no matter what the underlying transport is.