text: // by jussi-kalliokoski
  
  
  // This test is asynchronous. Watch out.
  
  // The test will potentially add garbage to console.
  
  (function(){
    try {
      // we're avoiding using Modernizr._domPrefixes as the prefix capitalization on
      // these guys are notoriously peculiar.
      var BlobBuilder = window.MozBlobBuilder || window.WebKitBlobBuilder || window.MSBlobBuilder || window.OBlobBuilder || window.BlobBuilder;
      var URL         = window.MozURL || window.webkitURL || window.MSURL || window.OURL || window.URL;
      var data    = 'Modernizr',
          blob,
          bb,
          worker,
          url,
          timeout,
          scriptText = 'this.onmessage=function(e){postMessage(e.data)}';
  
      try {
        blob = new Blob([scriptText], {type:'text/javascript'});
      } catch(e) {
        // we'll fall back to the deprecated BlobBuilder
      }
      if (!blob) {
        bb = new BlobBuilder();
        bb.append(scriptText);
        blob = bb.getBlob();
      }
  
      url = URL.createObjectURL(blob);
      worker = new Worker(url);
  
      worker.onmessage = function(e) {
        Modernizr.addTest('blobworkers', data === e.data);
        cleanup();
      };
  
      // Just in case...
      worker.onerror = fail;
      timeout = setTimeout(fail, 200);
  
      worker.postMessage(data);
    } catch (e) {
      fail();
    }
  
    function fail() {
      Modernizr.addTest('blobworkers', false);
      cleanup();
    }
  
    function cleanup() {
      if (url) {
        URL.revokeObjectURL(url);
      }
      if (worker) {
        worker.terminate();
      }
      if (timeout) {
        clearTimeout(timeout);
      }
    }
  }());
  