From: jenkins-bot Date: Sat, 28 Sep 2019 01:26:59 +0000 (+0000) Subject: Merge "resourceloader: Add $modules parameter to makeVersionQuery()" X-Git-Tag: 1.34.0-rc.0~61 X-Git-Url: https://git.cyclocoop.org/?a=commitdiff_plain;h=1791c928939f906627b9fb86c57ff8d9d626cbdb;hp=334eedf9cca15044734c31e20ded9fe8a2d9820b;p=lhc%2Fweb%2Fwiklou.git Merge "resourceloader: Add $modules parameter to makeVersionQuery()" --- diff --git a/includes/resourceloader/ResourceLoader.php b/includes/resourceloader/ResourceLoader.php index 3e55dfd7fb..5d104d389a 100644 --- a/includes/resourceloader/ResourceLoader.php +++ b/includes/resourceloader/ResourceLoader.php @@ -689,24 +689,29 @@ class ResourceLoader implements LoggerAwareInterface { * * @since 1.28 * @param ResourceLoaderContext $context + * @param string[]|null $modules * @return string Hash */ - public function makeVersionQuery( ResourceLoaderContext $context ) { + public function makeVersionQuery( ResourceLoaderContext $context, array $modules = null ) { + if ( $modules === null ) { + wfDeprecated( __METHOD__ . ' without $modules', '1.34' ); + $modules = $context->getModules(); + } // As of MediaWiki 1.28, the server and client use the same algorithm for combining // version hashes. There is no technical reason for this to be same, and for years the // implementations differed. If getCombinedVersion in PHP (used for StartupModule and // E-Tag headers) differs in the future from getCombinedVersion in JS (used for 'version' // query parameter), then this method must continue to match the JS one. - $moduleNames = []; - foreach ( $context->getModules() as $name ) { + $filtered = []; + foreach ( $modules as $name ) { if ( !$this->getModule( $name ) ) { // If a versioned request contains a missing module, the version is a mismatch // as the client considered a module (and version) we don't have. return ''; } - $moduleNames[] = $name; + $filtered[] = $name; } - return $this->getCombinedVersion( $context, $moduleNames ); + return $this->getCombinedVersion( $context, $filtered ); } /** @@ -863,7 +868,7 @@ class ResourceLoader implements LoggerAwareInterface { // - Version mismatch (T117587, T47877) if ( is_null( $context->getVersion() ) || $errors - || $context->getVersion() !== $this->makeVersionQuery( $context ) + || $context->getVersion() !== $this->makeVersionQuery( $context, $context->getModules() ) ) { $maxage = $rlMaxage['unversioned']['client']; $smaxage = $rlMaxage['unversioned']['server']; diff --git a/includes/resourceloader/ResourceLoaderClientHtml.php b/includes/resourceloader/ResourceLoaderClientHtml.php index 6529a9a306..71961e27be 100644 --- a/includes/resourceloader/ResourceLoaderClientHtml.php +++ b/includes/resourceloader/ResourceLoaderClientHtml.php @@ -436,7 +436,8 @@ JAVASCRIPT; // Link/embed each set foreach ( $moduleSets as list( $embed, $moduleSet ) ) { - $context->setModules( array_keys( $moduleSet ) ); + $moduleSetNames = array_keys( $moduleSet ); + $context->setModules( $moduleSetNames ); if ( $embed ) { // Decide whether to use style or script element if ( $only == ResourceLoaderModule::TYPE_STYLES ) { @@ -456,10 +457,10 @@ JAVASCRIPT; // This should NOT be done for the site group (T29564) because anons get that too // and we shouldn't be putting timestamps in CDN-cached HTML if ( $group === 'user' ) { - // Must setModules() before makeVersionQuery() - $context->setVersion( $rl->makeVersionQuery( $context ) ); + $context->setVersion( $rl->makeVersionQuery( $context, $moduleSetNames ) ); } + // Must setModules() before createLoaderURL() $url = $rl->createLoaderURL( $source, $context, $extraQuery ); // Decide whether to use 'style' or 'script' element