[MediaWiki-commits] [Gerrit] mediawiki/core[master]: Correct error handling for exceptions in 'user' module

2016-09-22 Thread Code Review
Bartosz Dziewoński has submitted this change and it was merged.

Change subject: Correct error handling for exceptions in 'user' module
..


Correct error handling for exceptions in 'user' module

Rearrange code so that the try...catch which is supposed to catch
exceptions when evalling code actually catches them. Evaluation of
'user' module was wrapped in `mw.loader.using( 'site' ).always( ... )`,
so it could be executed asynchronously, so try...catch never caught
exceptions from it; they bubbled up to all kinds of weird places and
broke things in confusing ways.

I think the same issue could occur for any module when waiting for
legacy modules to load ('wgResourceLoaderLegacyModules').

Bug: T145970
Change-Id: I91e7d0b4e50c786f7302e30a2b7ed43c3cd0da6c
---
M resources/src/mediawiki/mediawiki.js
1 file changed, 45 insertions(+), 42 deletions(-)

Approvals:
  Krinkle: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/resources/src/mediawiki/mediawiki.js 
b/resources/src/mediawiki/mediawiki.js
index 04807f4..89bb83b 100644
--- a/resources/src/mediawiki/mediawiki.js
+++ b/resources/src/mediawiki/mediawiki.js
@@ -1278,35 +1278,46 @@
registry[ module ].state = 'executing';
 
runScript = function () {
-   var script, markModuleReady, 
nestedAddScript, legacyWait,
+   var script, markModuleReady, 
nestedAddScript, legacyWait, implicitDependencies,
// Expand to include 
dependencies since we have to exclude both legacy modules
// and their dependencies from 
the legacyWait (to prevent a circular dependency).
legacyModules = resolve( 
mw.config.get( 'wgResourceLoaderLegacyModules', [] ) );
-   try {
-   script = registry[ module 
].script;
-   markModuleReady = function () {
-   registry[ module 
].state = 'ready';
-   handlePending( module );
-   };
-   nestedAddScript = function ( 
arr, callback, i ) {
-   // Recursively call 
queueModuleScript() in its own callback
-   // for each element of 
arr.
-   if ( i >= arr.length ) {
-   // We're at the 
end of the array
-   callback();
-   return;
-   }
 
-   queueModuleScript( arr[ 
i ], module ).always( function () {
-   
nestedAddScript( arr, callback, i + 1 );
-   } );
-   };
+   script = registry[ module ].script;
+   markModuleReady = function () {
+   registry[ module ].state = 
'ready';
+   handlePending( module );
+   };
+   nestedAddScript = function ( arr, 
callback, i ) {
+   // Recursively call 
queueModuleScript() in its own callback
+   // for each element of arr.
+   if ( i >= arr.length ) {
+   // We're at the end of 
the array
+   callback();
+   return;
+   }
 
-   legacyWait = ( $.inArray( 
module, legacyModules ) !== -1 )
-   ? $.Deferred().resolve()
-   : mw.loader.using( 
legacyModules );
+   queueModuleScript( arr[ i ], 
module ).always( function () {
+   nestedAddScript( arr, 
callback, i + 1 );
+   } );
+   };
 
-   

[MediaWiki-commits] [Gerrit] mediawiki/core[master]: Correct error handling for exceptions in 'user' module

2016-09-18 Thread Code Review
Bartosz Dziewoński has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/311329

Change subject: Correct error handling for exceptions in 'user' module
..

Correct error handling for exceptions in 'user' module

Rearrange code so that the try...catch which is supposed to catch
exceptions when evalling code actually catches them. Evaluation of
'user' module was wrapped in `mw.loader.using( 'site' ).always( ... )`,
so it could be executed asynchronously, so try...catch never caught
exceptions from it; they bubbled up to all kinds of weird places and
broke things in confusing ways.

I think the same issue could occur for any module when waiting for
legacy modules to load ('wgResourceLoaderLegacyModules').

Bug: T145970
Change-Id: I91e7d0b4e50c786f7302e30a2b7ed43c3cd0da6c
---
M resources/src/mediawiki/mediawiki.js
1 file changed, 45 insertions(+), 42 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/29/311329/1

diff --git a/resources/src/mediawiki/mediawiki.js 
b/resources/src/mediawiki/mediawiki.js
index 04807f4..89bb83b 100644
--- a/resources/src/mediawiki/mediawiki.js
+++ b/resources/src/mediawiki/mediawiki.js
@@ -1278,35 +1278,46 @@
registry[ module ].state = 'executing';
 
runScript = function () {
-   var script, markModuleReady, 
nestedAddScript, legacyWait,
+   var script, markModuleReady, 
nestedAddScript, legacyWait, implicitDependencies,
// Expand to include 
dependencies since we have to exclude both legacy modules
// and their dependencies from 
the legacyWait (to prevent a circular dependency).
legacyModules = resolve( 
mw.config.get( 'wgResourceLoaderLegacyModules', [] ) );
-   try {
-   script = registry[ module 
].script;
-   markModuleReady = function () {
-   registry[ module 
].state = 'ready';
-   handlePending( module );
-   };
-   nestedAddScript = function ( 
arr, callback, i ) {
-   // Recursively call 
queueModuleScript() in its own callback
-   // for each element of 
arr.
-   if ( i >= arr.length ) {
-   // We're at the 
end of the array
-   callback();
-   return;
-   }
 
-   queueModuleScript( arr[ 
i ], module ).always( function () {
-   
nestedAddScript( arr, callback, i + 1 );
-   } );
-   };
+   script = registry[ module ].script;
+   markModuleReady = function () {
+   registry[ module ].state = 
'ready';
+   handlePending( module );
+   };
+   nestedAddScript = function ( arr, 
callback, i ) {
+   // Recursively call 
queueModuleScript() in its own callback
+   // for each element of arr.
+   if ( i >= arr.length ) {
+   // We're at the end of 
the array
+   callback();
+   return;
+   }
 
-   legacyWait = ( $.inArray( 
module, legacyModules ) !== -1 )
-   ? $.Deferred().resolve()
-   : mw.loader.using( 
legacyModules );
+   queueModuleScript( arr[ i ], 
module ).always( function () {
+   nestedAddScript( arr, 
callback, i + 1 );
+   } );
+