text: function wrapGlobals(window, handler, shim) {
    if (!window) { return; }
    // Adapted from https://github.com/bugsnag/bugsnag-js
    var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');
    var i, global;
    for (i = 0; i < globals.length; ++i) {
      global = globals[i];
  
      if (window[global] && window[global].prototype) {
        _extendListenerPrototype(handler, window[global].prototype, shim);
      }
    }
  }
  
  function _extendListenerPrototype(handler, prototype, shim) {
    if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {
      var oldAddEventListener = prototype.addEventListener;
      while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {
        oldAddEventListener = oldAddEventListener._rollbarOldAdd;
      }
      var addFn = function(event, callback, bubble) {
        oldAddEventListener.call(this, event, handler.wrap(callback), bubble);
      };
      addFn._rollbarOldAdd = oldAddEventListener;
      addFn.belongsToShim = shim;
      prototype.addEventListener = addFn;
  
      var oldRemoveEventListener = prototype.removeEventListener;
      while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {
        oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;
      }
      var removeFn = function(event, callback, bubble) {
        oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);
      };
      removeFn._rollbarOldRemove = oldRemoveEventListener;
      removeFn.belongsToShim = shim;
      prototype.removeEventListener = removeFn;
    }
  }
  
  module.exports = wrapGlobals;
  