From 716d331f29587eaa5d86de43f9fe098d360af88e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bartosz=20Dziewo=C5=84ski?= Date: Fri, 3 Mar 2017 21:43:58 +0100 Subject: [PATCH] mw.special.apisandbox: Correct fixTokenAndResend() when a token is already known In this snippet: success = function ( k ) { delete tokenWait[ k ]; ... }; ... tokenWait[ k ] = page.tokenWidget.fetchToken() .done( success.bind( page.tokenWidget, k ) ) .fail( failure.bind( page.tokenWidget, k ) ); If fetchToken() returns a promise that is already resolved (because we have the token cached), the `delete tokenWait[ k ];` will happen before the `tokenWait[ k ] = ...`, and later code checking that `tokenWait` is empty will not work correctly. Fix this by doing the assigment before connecting the done/fail handlers, in a separate statement. Change-Id: Ieeb23cad0fd7e0cd4d3d259ff9f324f2001de0c6 --- .../src/mediawiki.special/mediawiki.special.apisandbox.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/src/mediawiki.special/mediawiki.special.apisandbox.js b/resources/src/mediawiki.special/mediawiki.special.apisandbox.js index 7687fd8e5c..97659edca3 100644 --- a/resources/src/mediawiki.special/mediawiki.special.apisandbox.js +++ b/resources/src/mediawiki.special/mediawiki.special.apisandbox.js @@ -1218,7 +1218,8 @@ if ( page.tokenWidget ) { k = page.apiModule + page.tokenWidget.paramInfo.name; - tokenWait[ k ] = page.tokenWidget.fetchToken() + tokenWait[ k ] = page.tokenWidget.fetchToken(); + tokenWait[ k ] .done( success.bind( page.tokenWidget, k ) ) .fail( failure.bind( page.tokenWidget, k ) ); } -- 2.20.1