From: Kunal Mehta Date: Tue, 26 Jul 2016 02:19:25 +0000 (-0700) Subject: Introduce MediaHandlerFactory to create MediaHandler objects X-Git-Tag: 1.31.0-rc.0~6174^2 X-Git-Url: http://git.heureux-cyclage.org/?a=commitdiff_plain;h=b4596edd0096746735214a00578e24f389060ae6;p=lhc%2Fweb%2Fwiklou.git Introduce MediaHandlerFactory to create MediaHandler objects This will allow further refactoring of override logic in parser tests. Ideally the factory class would not use $wgMediaHandlers directly, but that ends up breaking too many tests for now. Change-Id: I34a63ee7089ff26f86f3dd6f3cd1a37928bc4005 --- diff --git a/autoload.php b/autoload.php index 8c16adf5e4..f9b0f64362 100644 --- a/autoload.php +++ b/autoload.php @@ -790,6 +790,7 @@ $wgAutoloadLocalClasses = [ 'MarkpatrolledAction' => __DIR__ . '/includes/actions/MarkpatrolledAction.php', 'McTest' => __DIR__ . '/maintenance/mctest.php', 'MediaHandler' => __DIR__ . '/includes/media/MediaHandler.php', + 'MediaHandlerFactory' => __DIR__ . '/includes/media/MediaHandlerFactory.php', 'MediaStatisticsPage' => __DIR__ . '/includes/specials/SpecialMediaStatistics.php', 'MediaTransformError' => __DIR__ . '/includes/media/MediaTransformOutput.php', 'MediaTransformInvalidParametersException' => __DIR__ . '/includes/media/MediaTransformInvalidParametersException.php', diff --git a/includes/MediaWikiServices.php b/includes/MediaWikiServices.php index ff292cfb61..ac5fbe0108 100644 --- a/includes/MediaWikiServices.php +++ b/includes/MediaWikiServices.php @@ -11,6 +11,7 @@ use LBFactory; use LinkCache; use Liuggio\StatsdClient\Factory\StatsdDataFactory; use LoadBalancer; +use MediaHandlerFactory; use MediaWiki\Linker\LinkRenderer; use MediaWiki\Linker\LinkRendererFactory; use MediaWiki\Services\SalvageableService; @@ -511,6 +512,14 @@ class MediaWikiServices extends ServiceContainer { return $this->getService( 'WatchedItemQueryService' ); } + /** + * @since 1.28 + * @return MediaHandlerFactory + */ + public function getMediaHandlerFactory() { + return $this->getService( 'MediaHandlerFactory' ); + } + /** * @since 1.28 * @return GenderCache diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index d4f16ee199..438f667c37 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -158,6 +158,10 @@ return [ return new WatchedItemQueryService( $services->getDBLoadBalancer() ); }, + 'MediaHandlerFactory' => function( MediaWikiServices $services ) { + return new MediaHandlerFactory(); + }, + 'LinkCache' => function( MediaWikiServices $services ) { return new LinkCache( $services->getTitleFormatter() diff --git a/includes/media/MediaHandler.php b/includes/media/MediaHandler.php index 0ebfab7cb8..70a43f2576 100644 --- a/includes/media/MediaHandler.php +++ b/includes/media/MediaHandler.php @@ -20,6 +20,7 @@ * @file * @ingroup Media */ +use MediaWiki\MediaWikiServices; /** * Base media handler class @@ -36,9 +37,6 @@ abstract class MediaHandler { */ const MAX_ERR_LOG_SIZE = 65535; - /** @var MediaHandler[] Instance cache with array of MediaHandler */ - protected static $handlers = []; - /** * Get a MediaHandler for a given MIME type from the instance cache * @@ -46,29 +44,8 @@ abstract class MediaHandler { * @return MediaHandler|bool */ static function getHandler( $type ) { - global $wgMediaHandlers; - if ( !isset( $wgMediaHandlers[$type] ) ) { - wfDebug( __METHOD__ . ": no handler found for $type.\n" ); - - return false; - } - $class = $wgMediaHandlers[$type]; - if ( !isset( self::$handlers[$class] ) ) { - self::$handlers[$class] = new $class; - if ( !self::$handlers[$class]->isEnabled() ) { - wfDebug( __METHOD__ . ": $class is not enabled\n" ); - self::$handlers[$class] = false; - } - } - - return self::$handlers[$class]; - } - - /** - * Resets all static caches - */ - public static function resetCache() { - self::$handlers = []; + return MediaWikiServices::getInstance() + ->getMediaHandlerFactory()->getHandler( $type ); } /** diff --git a/includes/media/MediaHandlerFactory.php b/includes/media/MediaHandlerFactory.php new file mode 100644 index 0000000000..7e41242823 --- /dev/null +++ b/includes/media/MediaHandlerFactory.php @@ -0,0 +1,58 @@ +handlers[$class] ) ) { + $this->handlers[$class] = new $class; + if ( !$this->handlers[$class]->isEnabled() ) { + wfDebug( __METHOD__ . ": $class is not enabled\n" ); + $this->handlers[$class] = false; + } + } + + return $this->handlers[$class]; + } +} diff --git a/tests/phpunit/MediaWikiTestCase.php b/tests/phpunit/MediaWikiTestCase.php index 8dfe628a3f..9f09dddbbe 100644 --- a/tests/phpunit/MediaWikiTestCase.php +++ b/tests/phpunit/MediaWikiTestCase.php @@ -341,7 +341,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { // TODO: move global state into MediaWikiServices RequestContext::resetMain(); - MediaHandler::resetCache(); if ( session_id() !== '' ) { session_write_close(); session_id( '' ); @@ -530,7 +529,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { // TODO: move global state into MediaWikiServices RequestContext::resetMain(); - MediaHandler::resetCache(); if ( session_id() !== '' ) { session_write_close(); session_id( '' ); diff --git a/tests/phpunit/includes/MediaWikiServicesTest.php b/tests/phpunit/includes/MediaWikiServicesTest.php index d20344dc33..ac8c43b1ec 100644 --- a/tests/phpunit/includes/MediaWikiServicesTest.php +++ b/tests/phpunit/includes/MediaWikiServicesTest.php @@ -316,6 +316,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase { 'DBLoadBalancer' => [ 'DBLoadBalancer', 'LoadBalancer' ], 'WatchedItemStore' => [ 'WatchedItemStore', WatchedItemStore::class ], 'WatchedItemQueryService' => [ 'WatchedItemQueryService', WatchedItemQueryService::class ], + 'MediaHandlerFactory' => [ 'MediaHandlerFactory', MediaHandlerFactory::class ], 'GenderCache' => [ 'GenderCache', GenderCache::class ], 'LinkCache' => [ 'LinkCache', LinkCache::class ], 'LinkRenderer' => [ 'LinkRenderer', LinkRenderer::class ],