[MediaWiki-commits] [Gerrit] mediawiki/core[master]: Correct error handling for exceptions in 'user' module
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
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 ); + } ); +