From: Timo Tijhof Date: Fri, 25 Oct 2013 19:15:00 +0000 (+0200) Subject: mw.loader: Always log exceptions caught from userland callbacks X-Git-Tag: 1.31.0-rc.0~18387^2 X-Git-Url: http://git.cyclocoop.org/%22.%28%24lien.?a=commitdiff_plain;h=8bee2b1fdfa85c4b26cb2d747a8d599b018a5d4d;p=lhc%2Fweb%2Fwiklou.git mw.loader: Always log exceptions caught from userland callbacks We usually don't catch these at all (not supposed to, as they're foreign). But in case of handlePending() we catch them because we need to ensure the state is kept track of properly (an error is never final in javascript since execution always continues). However we should at least log it in that case. We already did this in case of the error() callback, it now does this for the ready() callback as well. Bug: 55989 Change-Id: I61f109178833fed60fbba7725fd47b4ff3d2edf4 --- diff --git a/resources/mediawiki/mediawiki.js b/resources/mediawiki/mediawiki.js index c470186e5f..80223e5d2f 100644 --- a/resources/mediawiki/mediawiki.js +++ b/resources/mediawiki/mediawiki.js @@ -831,22 +831,18 @@ var mw = ( function ( $, undefined ) { j -= 1; try { if ( hasErrors ) { - throw new Error( 'Module ' + module + ' failed.'); + if ( $.isFunction( job.error ) ) { + job.error( new Error( 'Module ' + module + ' has failed dependencies' ), [module] ); + } } else { if ( $.isFunction( job.ready ) ) { job.ready(); } } } catch ( e ) { - if ( $.isFunction( job.error ) ) { - try { - job.error( e, [module] ); - } catch ( ex ) { - // A user-defined operation raised an exception. Swallow to protect - // our state machine! - log( 'Exception thrown by job.error', ex ); - } - } + // A user-defined callback raised an exception. + // Swallow it to protect our state machine! + log( 'Exception thrown by job.error', e ); } } }