mirror of
https://github.com/Modernizr/Modernizr.git
synced 2026-01-09 23:57:57 -05:00
Add support for Blob constructor in blobworkers test since BlobBuilder is deprecated and has been removed from firefox
whitespace change fix cleanup for blobworker; ensure worker termination, ensure url revocation, and ensure addTest is only called once. style fixes. factor out cleanup & fail functions
This commit is contained in:
@@ -25,36 +25,57 @@ define(['Modernizr', 'addTest'], function( Modernizr, addTest ) {
|
||||
// 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';
|
||||
var bb = new BlobBuilder();
|
||||
var data = 'Modernizr',
|
||||
blob,
|
||||
bb,
|
||||
worker,
|
||||
url,
|
||||
timeout,
|
||||
scriptText = 'this.onmessage=function(e){postMessage(e.data)}';
|
||||
|
||||
bb.append('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();
|
||||
}
|
||||
|
||||
var url = URL.createObjectURL(bb.getBlob());
|
||||
var worker = new Worker(url);
|
||||
|
||||
bb = null;
|
||||
url = URL.createObjectURL(blob);
|
||||
worker = new Worker(url);
|
||||
|
||||
worker.onmessage = function(e) {
|
||||
worker.terminate();
|
||||
URL.revokeObjectURL(url);
|
||||
addTest('blobworkers', data === e.data);
|
||||
worker = null;
|
||||
cleanup();
|
||||
};
|
||||
|
||||
// Just in case...
|
||||
worker.onerror = function() {
|
||||
addTest('blobworkers', false);
|
||||
worker = null;
|
||||
};
|
||||
|
||||
setTimeout(function() {
|
||||
addTest('blobworkers', false);
|
||||
}, 200);
|
||||
worker.onerror = fail;
|
||||
timeout = setTimeout(fail, 200);
|
||||
|
||||
worker.postMessage(data);
|
||||
} catch (e) {
|
||||
fail();
|
||||
}
|
||||
|
||||
function fail() {
|
||||
addTest('blobworkers', false);
|
||||
cleanup();
|
||||
}
|
||||
|
||||
function cleanup() {
|
||||
if (url) {
|
||||
URL.revokeObjectURL(url);
|
||||
}
|
||||
if (worker) {
|
||||
worker.terminate();
|
||||
}
|
||||
if (timeout) {
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user