| '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 firewalls | 
| var 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; |