mw.loader: Always log exceptions caught from userland callbacks
authorTimo Tijhof <krinklemail@gmail.com>
Fri, 25 Oct 2013 19:15:00 +0000 (21:15 +0200)
committerTimo Tijhof <krinklemail@gmail.com>
Fri, 25 Oct 2013 19:15:00 +0000 (21:15 +0200)
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

resources/mediawiki/mediawiki.js

index c470186..80223e5 100644 (file)
@@ -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 );
                                                }
                                        }
                                }