| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | 'use strict';var inherits = require('inherits')  , iframeUtils = require('../../utils/iframe')  , urlUtils = require('../../utils/url')  , EventEmitter = require('events').EventEmitter  , random = require('../../utils/random')  ;var debug = function() {};if (process.env.NODE_ENV !== 'production') {  debug = require('debug')('sockjs-client:receiver:htmlfile');}function HtmlfileReceiver(url) {  debug(url);  EventEmitter.call(this);  var self = this;  iframeUtils.polluteGlobalNamespace();  this.id = 'a' + random.string(6);  url = urlUtils.addQuery(url, 'c=' + decodeURIComponent(iframeUtils.WPrefix + '.' + this.id));  debug('using htmlfile', HtmlfileReceiver.htmlfileEnabled);  var constructFunc = HtmlfileReceiver.htmlfileEnabled ?      iframeUtils.createHtmlfile : iframeUtils.createIframe;  global[iframeUtils.WPrefix][this.id] = {    start: function() {      debug('start');      self.iframeObj.loaded();    }  , message: function(data) {      debug('message', data);      self.emit('message', data);    }  , stop: function() {      debug('stop');      self._cleanup();      self._close('network');    }  };  this.iframeObj = constructFunc(url, function() {    debug('callback');    self._cleanup();    self._close('permanent');  });}inherits(HtmlfileReceiver, EventEmitter);HtmlfileReceiver.prototype.abort = function() {  debug('abort');  this._cleanup();  this._close('user');};HtmlfileReceiver.prototype._cleanup = function() {  debug('_cleanup');  if (this.iframeObj) {    this.iframeObj.cleanup();    this.iframeObj = null;  }  delete global[iframeUtils.WPrefix][this.id];};HtmlfileReceiver.prototype._close = function(reason) {  debug('_close', reason);  this.emit('close', null, reason);  this.removeAllListeners();};HtmlfileReceiver.htmlfileEnabled = false;// obfuscate to avoid firewallsvar axo = ['Active'].concat('Object').join('X');if (axo in global) {  try {    HtmlfileReceiver.htmlfileEnabled = !!new global[axo]('htmlfile');  } catch (x) {    // intentionally empty  }}HtmlfileReceiver.enabled = HtmlfileReceiver.htmlfileEnabled || iframeUtils.iframeEnabled;module.exports = HtmlfileReceiver;
 |