diff options
author | Gergő Tisza <tgr.huwiki@gmail.com> | 2024-07-17 19:08:33 +0200 |
---|---|---|
committer | Gergő Tisza <tgr.huwiki@gmail.com> | 2024-07-31 17:02:35 +0000 |
commit | 31f614f7322c1e050eba0a91aa339e3cc495b8a1 (patch) | |
tree | c3b5f7268570d7aa456e9b64a8ac3dba49833c73 /tests/phpunit/includes/ResourceLoader/StartUpModuleTest.php | |
parent | 731966bd925bd9e1e986eb872fb24fb9e86ff188 (diff) | |
download | mediawikicore-31f614f7322c1e050eba0a91aa339e3cc495b8a1.tar.gz mediawikicore-31f614f7322c1e050eba0a91aa339e3cc495b8a1.zip |
resourceloader: Add ResourceLoaderModifyStartupSourceUrls hook
Add a hook to StartUpModule that can modify the source URLs
that get embedded into the startup module JS in the form of
mw.loader.addSource() parameters.
The intended use case is preserving relevant URL information,
especially in the case of the 'local' source which is a
relative URL, when the URL pattern of the load.php URL
that generates the startup module code is different from the
URL pattern of the page that loads that load.php URL.
(E.g. $wgLoadScript is set to a different domain than the
current page, to canonicalize load.php URLs for a site
that's reachable via multiple domains, but then by default
the local source is a relative URL which would be
interpreted relative to the URL of the page that executes
the startup module code, so it would result in calls to
non-canonical load.php URLs).
Bug: T365162
Bug: T371530
Change-Id: I199ab779abd0596b836ae43dcc5f2f2a489c9274
Diffstat (limited to 'tests/phpunit/includes/ResourceLoader/StartUpModuleTest.php')
-rw-r--r-- | tests/phpunit/includes/ResourceLoader/StartUpModuleTest.php | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/phpunit/includes/ResourceLoader/StartUpModuleTest.php b/tests/phpunit/includes/ResourceLoader/StartUpModuleTest.php index 99123adc38de..7224a8532e89 100644 --- a/tests/phpunit/includes/ResourceLoader/StartUpModuleTest.php +++ b/tests/phpunit/includes/ResourceLoader/StartUpModuleTest.php @@ -657,6 +657,8 @@ mw.loader.register([ * @dataProvider provideGetModuleRegistrations */ public function testGetModuleRegistrations( $case ) { + $this->clearHook( 'ResourceLoaderModifyStartupSourceUrls' ); + $extraQuery = $case['extraQuery'] ?? []; $context = $this->getResourceLoaderContext( $extraQuery ); $rl = $context->getResourceLoader(); @@ -666,6 +668,7 @@ mw.loader.register([ $rl->register( $case['modules'] ); $module = new StartUpModule(); $module->setConfig( $rl->getConfig() ); + $module->setHookContainer( $this->getServiceContainer()->getHookContainer() ); $out = ltrim( $case['out'], "\n" ); // Disable log from getModuleRegistrations via MWExceptionHandler @@ -726,11 +729,14 @@ mw.loader.register([ * @dataProvider provideGetModuleRegistrationsProduction */ public function testGetModuleRegistrationsProduction( array $case ) { + $this->clearHook( 'ResourceLoaderModifyStartupSourceUrls' ); + $context = $this->getResourceLoaderContext( [ 'debug' => 'false' ] ); $rl = $context->getResourceLoader(); $rl->register( $case['modules'] ); $module = new StartUpModule(); $module->setConfig( $rl->getConfig() ); + $module->setHookContainer( $this->getServiceContainer()->getHookContainer() ); $out = ltrim( $case['out'], "\n" ); // Tolerate exception logs for cases that expect getVersionHash() to throw. @@ -742,6 +748,28 @@ mw.loader.register([ ); } + public function testGetModuleRegistrations_hook() { + $this->clearHook( 'ResourceLoaderModifyStartupSourceUrls' ); + $this->setTemporaryHook( 'ResourceLoaderModifyStartupSourceUrls', function ( &$urls, $context ) { + $urlUtils = $this->getServiceContainer()->getUrlUtils(); + $urls['local'] = $urlUtils->expand( $urls['local'] ); + } ); + + $context = $this->getResourceLoaderContext(); + $rl = $context->getResourceLoader(); + $module = new StartUpModule(); + $module->setHookContainer( $this->getServiceContainer()->getHookContainer() ); + $module->setConfig( $rl->getConfig() ); + $out = 'mw.loader.addSource({ + "local": "https://example.org/w/load.php" +}); +mw.loader.register([]);'; + $this->assertEquals( + $out, + $module->getModuleRegistrations( $context ) + ); + } + public static function provideRegistrations() { return [ [ [ @@ -766,6 +794,8 @@ mw.loader.register([ * @dataProvider provideRegistrations */ public function testRegistrationsMinified( $modules ) { + $this->clearHook( 'ResourceLoaderModifyStartupSourceUrls' ); + $context = $this->getResourceLoaderContext( [ 'debug' => 'false', ] ); @@ -773,6 +803,7 @@ mw.loader.register([ $rl->register( $modules ); $module = new StartUpModule(); $module->setConfig( $rl->getConfig() ); + $module->setHookContainer( $this->getServiceContainer()->getHookContainer() ); $out = 'mw.loader.addSource({"local":"/w/load.php"});' . "\n" . 'mw.loader.register([' . '["test.blank","{blankVer}"],' @@ -791,6 +822,8 @@ mw.loader.register([ * @dataProvider provideRegistrations */ public function testRegistrationsUnminified( $modules ) { + $this->clearHook( 'ResourceLoaderModifyStartupSourceUrls' ); + $context = $this->getResourceLoaderContext( [ 'debug' => 'true', ] ); @@ -798,6 +831,7 @@ mw.loader.register([ $rl->register( $modules ); $module = new StartUpModule(); $module->setConfig( $rl->getConfig() ); + $module->setHookContainer( $this->getServiceContainer()->getHookContainer() ); $out = 'mw.loader.addSource({ "local": "/w/load.php" @@ -827,6 +861,7 @@ mw.loader.register([ } public function testGetVersionHash_varyConfig() { + $this->clearHook( 'ResourceLoaderModifyStartupSourceUrls' ); $context = $this->getResourceLoaderContext(); $module = new StartUpModule(); @@ -835,6 +870,7 @@ mw.loader.register([ $module = new StartUpModule(); $module->setConfig( $context->getResourceLoader()->getConfig() ); + $module->setHookContainer( $this->getServiceContainer()->getHookContainer() ); $version2 = $module->getVersionHash( $context ); $this->assertEquals( @@ -845,6 +881,8 @@ mw.loader.register([ } public function testGetVersionHash_varyModule() { + $this->clearHook( 'ResourceLoaderModifyStartupSourceUrls' ); + $context1 = $this->getResourceLoaderContext( [ 'debug' => 'false', ] ); @@ -855,6 +893,7 @@ mw.loader.register([ ] ); $module = new StartUpModule(); $module->setConfig( $rl1->getConfig() ); + $module->setHookContainer( $this->getServiceContainer()->getHookContainer() ); $module->setName( 'test' ); $version1 = $module->getVersionHash( $context1 ); @@ -866,6 +905,7 @@ mw.loader.register([ ] ); $module = new StartUpModule(); $module->setConfig( $rl2->getConfig() ); + $module->setHookContainer( $this->getServiceContainer()->getHookContainer() ); $module->setName( 'test' ); $version2 = $module->getVersionHash( $context2 ); @@ -880,6 +920,7 @@ mw.loader.register([ ] ); $module = new StartUpModule(); $module->setConfig( $rl3->getConfig() ); + $module->setHookContainer( $this->getServiceContainer()->getHookContainer() ); $module->setName( 'test' ); $version3 = $module->getVersionHash( $context3 ); @@ -898,6 +939,8 @@ mw.loader.register([ } public function testGetVersionHash_varyDeps() { + $this->clearHook( 'ResourceLoaderModifyStartupSourceUrls' ); + $context = $this->getResourceLoaderContext( [ 'debug' => 'false' ] ); $rl = $context->getResourceLoader(); $rl->register( [ @@ -908,6 +951,7 @@ mw.loader.register([ ] ); $module = new StartUpModule(); $module->setConfig( $rl->getConfig() ); + $module->setHookContainer( $this->getServiceContainer()->getHookContainer() ); $module->setName( 'test' ); $version1 = $module->getVersionHash( $context ); @@ -921,6 +965,7 @@ mw.loader.register([ ] ); $module = new StartUpModule(); $module->setConfig( $rl->getConfig() ); + $module->setHookContainer( $this->getServiceContainer()->getHookContainer() ); $module->setName( 'test' ); $version2 = $module->getVersionHash( $context ); |