123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- // Copyright 2006 The Closure Library Authors. All Rights Reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS-IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- /**
- * @fileoverview tmpnetwork.js contains some temporary networking functions
- * for browserchannel which will be moved at a later date.
- */
- /**
- * Namespace for BrowserChannel
- */
- goog.provide('goog.net.tmpnetwork');
- goog.require('goog.Uri');
- goog.require('goog.net.ChannelDebug');
- /**
- * Default timeout to allow for google.com pings.
- * @type {number}
- */
- goog.net.tmpnetwork.GOOGLECOM_TIMEOUT = 10000;
- /**
- * @define {string} url to use to test for internet connectivity.
- * Use protocol-relative URLs to avoid insecure content warnings in IE.
- */
- goog.define(
- 'goog.net.tmpnetwork.TEST_URL', '//www.google.com/images/cleardot.gif');
- /**
- * Pings the network to check if an error is a server error or user's network
- * error.
- *
- * @param {Function} callback The function to call back with results.
- * @param {goog.Uri?=} opt_imageUri The URI of an image to use for the network
- * test. You *must* provide an image URI; the default behavior is provided
- * for compatibility with existing code, but the search team does not want
- * people using images served off of google.com for this purpose. The
- * default will go away when all usages have been changed.
- */
- goog.net.tmpnetwork.testGoogleCom = function(callback, opt_imageUri) {
- // We need to add a 'rand' to make sure the response is not fulfilled
- // by browser cache.
- var uri = opt_imageUri;
- if (!uri) {
- uri = new goog.Uri(goog.net.tmpnetwork.TEST_URL);
- uri.makeUnique();
- }
- goog.net.tmpnetwork.testLoadImage(
- uri.toString(), goog.net.tmpnetwork.GOOGLECOM_TIMEOUT, callback);
- };
- /**
- * Test loading the given image, retrying if necessary.
- * @param {string} url URL to the iamge.
- * @param {number} timeout Milliseconds before giving up.
- * @param {Function} callback Function to call with results.
- * @param {number} retries The number of times to retry.
- * @param {number=} opt_pauseBetweenRetriesMS Optional number of milliseconds
- * between retries - defaults to 0.
- */
- goog.net.tmpnetwork.testLoadImageWithRetries = function(
- url, timeout, callback, retries, opt_pauseBetweenRetriesMS) {
- var channelDebug = new goog.net.ChannelDebug();
- channelDebug.debug('TestLoadImageWithRetries: ' + opt_pauseBetweenRetriesMS);
- if (retries == 0) {
- // no more retries, give up
- callback(false);
- return;
- }
- var pauseBetweenRetries = opt_pauseBetweenRetriesMS || 0;
- retries--;
- goog.net.tmpnetwork.testLoadImage(url, timeout, function(succeeded) {
- if (succeeded) {
- callback(true);
- } else {
- // try again
- goog.global.setTimeout(function() {
- goog.net.tmpnetwork.testLoadImageWithRetries(
- url, timeout, callback, retries, pauseBetweenRetries);
- }, pauseBetweenRetries);
- }
- });
- };
- /**
- * Test loading the given image.
- * @param {string} url URL to the iamge.
- * @param {number} timeout Milliseconds before giving up.
- * @param {Function} callback Function to call with results.
- */
- goog.net.tmpnetwork.testLoadImage = function(url, timeout, callback) {
- 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);
- }
- };
- 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() {
- if (img.ontimeout) {
- img.ontimeout();
- }
- }, timeout);
- img.src = url;
- };
- /**
- * Clear handlers to avoid memory leaks.
- * @param {Image} img The image to clear handlers from.
- * @private
- */
- goog.net.tmpnetwork.clearImageCallbacks_ = function(img) {
- // NOTE(user): Nullified individually to avoid compiler warnings
- // (BUG 658126)
- img.onload = null;
- img.onerror = null;
- img.onabort = null;
- img.ontimeout = null;
- };
|