aboutsummaryrefslogtreecommitdiffstats
path: root/tests/phpunit/includes/ResourceLoader/StartUpModuleTest.php
diff options
context:
space:
mode:
authorGergő Tisza <tgr.huwiki@gmail.com>2024-07-17 19:08:33 +0200
committerGergő Tisza <tgr.huwiki@gmail.com>2024-07-31 17:02:35 +0000
commit31f614f7322c1e050eba0a91aa339e3cc495b8a1 (patch)
treec3b5f7268570d7aa456e9b64a8ac3dba49833c73 /tests/phpunit/includes/ResourceLoader/StartUpModuleTest.php
parent731966bd925bd9e1e986eb872fb24fb9e86ff188 (diff)
downloadmediawikicore-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.php45
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 );