aboutsummaryrefslogtreecommitdiff
path: root/src/library_browser.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/library_browser.js')
-rw-r--r--src/library_browser.js25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/library_browser.js b/src/library_browser.js
index f3654f81..51c0cf78 100644
--- a/src/library_browser.js
+++ b/src/library_browser.js
@@ -133,8 +133,18 @@ mergeInto(LibraryManager.library, {
Module["preloadedAudios"][name] = audio;
if (onload) onload(byteArray);
}
+ function fail() {
+ if (done) return;
+ done = true;
+ Module["preloadedAudios"][name] = new Audio(); // empty shim
+ if (onerror) onerror();
+ }
if (Browser.hasBlobConstructor) {
- var b = new Blob([byteArray], { type: getMimetype(name) });
+ try {
+ var b = new Blob([byteArray], { type: getMimetype(name) });
+ } catch(e) {
+ return fail();
+ }
var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this!
var audio = new Audio();
audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
@@ -174,8 +184,7 @@ mergeInto(LibraryManager.library, {
finish(audio); // try to use it even though it is not necessarily ready to play
}, 10000);
} else {
- Module["preloadedAudios"][name] = new Audio(); // empty shim
- if (onerror) onerror();
+ return fail();
}
};
Module['preloadPlugins'].push(audioPlugin);
@@ -252,7 +261,7 @@ mergeInto(LibraryManager.library, {
},
requestFullScreen: function() {
- var canvas = Module.canvas;
+ var canvas = Module['canvas'];
function fullScreenChange() {
var isFullScreen = false;
if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
@@ -375,7 +384,7 @@ mergeInto(LibraryManager.library, {
Module['noExitRuntime'] = true;
var jsFunc = FUNCTION_TABLE[func];
- var wrapper = function() {
+ Browser.mainLoop.runner = function() {
if (Browser.mainLoop.queue.length > 0) {
var start = Date.now();
var blocker = Browser.mainLoop.queue.shift();
@@ -393,7 +402,7 @@ mergeInto(LibraryManager.library, {
}
console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers);
Browser.mainLoop.updateStatus();
- setTimeout(wrapper, 0);
+ setTimeout(Browser.mainLoop.runner, 0);
return;
}
if (Browser.mainLoop.shouldPause) {
@@ -427,11 +436,11 @@ mergeInto(LibraryManager.library, {
}
if (fps && fps > 0) {
Browser.mainLoop.scheduler = function() {
- setTimeout(wrapper, 1000/fps); // doing this each time means that on exception, we stop
+ setTimeout(Browser.mainLoop.runner, 1000/fps); // doing this each time means that on exception, we stop
}
} else {
Browser.mainLoop.scheduler = function() {
- Browser.requestAnimationFrame(wrapper);
+ Browser.requestAnimationFrame(Browser.mainLoop.runner);
}
}
Browser.mainLoop.scheduler();