Page MenuHomePhabricator

Dismantle ResourceLoader's "targets" system
Open, LowPublic

Description

Endlessly discussed and griped about but apparently there's no task.

Background

This system is carelessly leaving behind a trail of maintenance overhead. With new issues popping up all the time. Here's a quick sample just from MediaWiki core (quick Resources.php search for "target" and "mobile").

Fixups:

Issues:

Plan

Right now, the problem is that many extensions rely on using OutputPage::addModule inside hooks to add code. There is no way for mobile or a skin to override these decisions. However, many JavaScript modules assume a certain skin and would break if loaded in the wrong skin.

Existing violations can be determined by using X-Wikimedia-Debug and scanning the logs for the query "message:"not loadable on target"

Prep work

  • Many modules in MobileFrontend set "targets": "mobile". This is a shortcut to making sure code only loads in mobile. A module should either by desktop+mobile or desktop going forward. Fix all violations that set only mobile. The important thing to fix is "where" and how the code gets loaded. Where code needs to only load on mobile it should make use of MobileContext.
  • Error when a module is loaded without the 'desktop' target.
  • We need a mechanism for extensions to load modules in such a way that a skin can disable them (or use a different module in its place). One way might be to move all module registrations to Skin::getDefaultModules and preventing access to addModules and addModuleStyles. This would allow the skin the final say in what modules get added to the page. Is that something that's plausible?
  • Certain modules like gadgets and mobile.site are kept out of mobile by the targets system
  • We'll mark any deprecated modules that are not mobile friendly as 'deprecated' e.g. jquery.ui - while it will be possible to load these on mobile, we'll make sure these are not on the critical path of non-special page views.

Deprecating 'targets' system

  • Move all modules to the new system for module registration.
  • target mode desktop will be used on special pages going forward. This should remove many of the special page related violations.
  • When the logs are running clean, we'll turn off the targets system - all modules will be 'mobile'+'desktop' by default.

Details

ProjectBranchLines +/-Subject
mediawiki/coremaster+126 -0
mediawiki/coremaster+17 -7
mediawiki/coremaster+1 -1
mediawiki/coremaster+0 -14
mediawiki/coremaster+1 -4
mediawiki/extensions/ContentTranslationmaster+1 -0
mediawiki/extensions/TemplateSandboxmaster+0 -3
mediawiki/extensions/VisualEditormaster+1 -0
mediawiki/extensions/VisualEditormaster+16 -4
mediawiki/extensions/VisualEditormaster+11 -2
mediawiki/extensions/ContentTranslationmaster+3 -0
mediawiki/extensions/Flowmaster+2 -1
mediawiki/extensions/Disambiguatormaster+13 -1
mediawiki/extensions/DarkModemaster+0 -6
mediawiki/extensions/Wikibasemaster+4 -2
mediawiki/extensions/ContentTranslationmaster+7 -0
mediawiki/coremaster+4 -0
mediawiki/extensions/FlaggedRevsmaster+8 -0
mediawiki/coremaster+1 -0
mediawiki/coremaster+1 -0
mediawiki/coremaster+4 -0
mediawiki/coremaster+4 -0
mediawiki/coremaster+1 -1
mediawiki/coremaster+13 -2
Show related patches Customize query in gerrit

Related Objects

StatusSubtypeAssignedTask
OpenNone
OpenNone
ResolvedKrinkle
Resolvedpmiazga
ResolvedJdlrobson
DeclinedNone
ResolvedJdlrobson
ResolvedJdlrobson
DeclinedNone
ResolvedNiedzielski
DuplicateReedy
ResolvedNiedzielski
ResolvedJdlrobson
ResolvedJdlrobson
DuplicateNone
Resolvedpmiazga
Resolvedovasileva
Resolvedovasileva
Resolvedovasileva
DuplicateNone
Resolvedpmiazga
DuplicateNone
Resolvedpmiazga
ResolvedKrinkle
Resolvedphuedx
ResolvedJdlrobson
Resolvedovasileva
DuplicateBUG REPORTNone
ResolvedJdlrobson
ResolvedJdlrobson
ResolvedJdlrobson
ResolvedJdlrobson
ResolvedJdlrobson
ResolvedJdlrobson
Resolvedsanthosh
DeclinedNone
ResolvedBUG REPORTJdlrobson
OpenNone
OpenNone
ResolvedLucas_Werkmeister_WMDE
OpenNone
Resolvedkostajh
Resolvedcscott
Resolvedcscott
Resolvedcscott
OpenS_Mukuti
OpenNone
OpenNone
OpenNone
OpenNone
OpenNone
OpenNone
ResolvedJdlrobson
ResolvedJdlrobson
ResolvedBUG REPORTkostajh
DuplicateNone
Resolvedkostajh
OpenBUG REPORTNone
ResolvedLens0021

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

Change 663910 had a related patch set uploaded (by Krinkle; owner: Krinkle):
[mediawiki/core@master] mediawiki.action.edit: Set desktop/mobile target

https://gerrit.wikimedia.org/r/663910

Change 663910 merged by jenkins-bot:
[mediawiki/core@master] mediawiki.action.edit: Set desktop/mobile target

https://gerrit.wikimedia.org/r/663910

Change 799262 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/core@master] mediawiki.special.createaccount: Allow loading on mobile

https://gerrit.wikimedia.org/r/799262

Change 799262 merged by jenkins-bot:

[mediawiki/core@master] mediawiki.special.createaccount: Allow loading on mobile

https://gerrit.wikimedia.org/r/799262

Change 817927 had a related patch set uploaded (by Krinkle; author: Gergő Tisza):

[mediawiki/extensions/FlaggedRevs@master] Enable ext.flaggedRevs.advanced and ext.flaggedRevs.review on mobile

https://gerrit.wikimedia.org/r/817927

Change 817927 merged by jenkins-bot:

[mediawiki/extensions/FlaggedRevs@master] Enable ext.flaggedRevs.advanced and ext.flaggedRevs.review on mobile

https://gerrit.wikimedia.org/r/817927

Change 859150 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/DarkMode@master] Dark mode code should load on mobile and desktop targets

https://gerrit.wikimedia.org/r/859150

Change 859151 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/TemplateSandbox@master] Mixing packageFiles and targets should not be allowed

https://gerrit.wikimedia.org/r/859151

Change 859152 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/ContentTranslation@master] Remove mobile-only modules

https://gerrit.wikimedia.org/r/859152

Change 859609 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/VisualEditor@master] All modules should target both mobile and desktop targets

https://gerrit.wikimedia.org/r/859609

Change 859642 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/core@master] Should be possible to load mediawiki upload modules on mobile domain

https://gerrit.wikimedia.org/r/859642

Change 859648 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/Disambiguator@master] Load ext.disambiguator on mobile

https://gerrit.wikimedia.org/r/859648

Change 859650 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/Wikibase@master] Remove desktop only es6 modules

https://gerrit.wikimedia.org/r/859650

Change 859642 merged by jenkins-bot:

[mediawiki/core@master] resources: Should be possible to load upload modules on mobile

https://gerrit.wikimedia.org/r/859642

Change 859152 merged by jenkins-bot:

[mediawiki/extensions/ContentTranslation@master] Remove desktop only es6 modules

https://gerrit.wikimedia.org/r/859152

Change 859650 merged by jenkins-bot:

[mediawiki/extensions/Wikibase@master] Make es6 modules available on all targets

https://gerrit.wikimedia.org/r/859650

Change 859150 merged by jenkins-bot:

[mediawiki/extensions/DarkMode@master] Dark mode code should load on mobile and desktop targets

https://gerrit.wikimedia.org/r/859150

Change 859648 merged by jenkins-bot:

[mediawiki/extensions/Disambiguator@master] Add mobile target to ext.disambiguator

https://gerrit.wikimedia.org/r/859648

Change 865811 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/core@master] ResourceLoader: Default modules to mobile and desktop targets

https://gerrit.wikimedia.org/r/865811

Change 867283 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/VisualEditor@master] Set targets explicitly on desktop only module

https://gerrit.wikimedia.org/r/867283

Change 867285 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/Flow@master] ext.flow.visualEditor targets desktop explicitly

https://gerrit.wikimedia.org/r/867285

Change 867287 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/ContentTranslation@master] Set targets explicitly

https://gerrit.wikimedia.org/r/867287

Change 867285 merged by jenkins-bot:

[mediawiki/extensions/Flow@master] ext.flow.visualEditor targets desktop explicitly

https://gerrit.wikimedia.org/r/867285

Change 867287 merged by jenkins-bot:

[mediawiki/extensions/ContentTranslation@master] Set targets explicitly

https://gerrit.wikimedia.org/r/867287

Change 867283 merged by jenkins-bot:

[mediawiki/extensions/VisualEditor@master] Set targets explicitly on desktop only module

https://gerrit.wikimedia.org/r/867283

Change 868140 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/VisualEditor@master] QUnit test module should explicitly target desktop

https://gerrit.wikimedia.org/r/868140

Change 868141 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/ContentTranslation@master] Set QUnit test module to target desktop explicitly

https://gerrit.wikimedia.org/r/868141

Change 859609 abandoned by Jdlrobson:

[mediawiki/extensions/VisualEditor@master] All modules should target both mobile and desktop targets

Reason:

Thanks! Yeh https://gerrit.wikimedia.org/r/c/mediawiki/extensions/VisualEditor/+/867283 should unblock changing the default targets.

https://gerrit.wikimedia.org/r/859609

Change 868140 merged by jenkins-bot:

[mediawiki/extensions/VisualEditor@master] QUnit test module should explicitly target desktop

https://gerrit.wikimedia.org/r/868140

Change 859151 merged by jenkins-bot:

[mediawiki/extensions/TemplateSandbox@master] Don't prevent the VisualEditor plugin from loading on mobile

https://gerrit.wikimedia.org/r/859151

Change 868141 merged by jenkins-bot:

[mediawiki/extensions/ContentTranslation@master] Set QUnit test module to target desktop explicitly

https://gerrit.wikimedia.org/r/868141

Change 865811 merged by jenkins-bot:

[mediawiki/core@master] ResourceLoader: Default File modules to mobile and desktop targets

https://gerrit.wikimedia.org/r/865811

Change 885788 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/core@master] Adjust default targets in RL/Module

https://gerrit.wikimedia.org/r/885788

Change 885793 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[mediawiki/core@master] ResourceLoader: Define targets in a single location

https://gerrit.wikimedia.org/r/885793

Not doing this for ResourceLoaderModule was somewhat intentional to limit scope and impact of the change - it seems in the PageTriage case, a RL\FileModule is depending on a RL\WikiModule (which I believe is quite a rare situation). The change in https://gerrit.wikimedia.org/r/885793 would change the defaults for WikiModules as well as anything using Module directly.

In terms of Module: it is only used in https://codesearch.wmcloud.org/deployed/?q=extends%20ResourceLoaderModule&i=nope&files=&excludeFiles=&repos=
I'm not too worried about this, as I think the only thing this would effect is CurrencyRatesModule (the others explicitly set targets)

In terms of WikiModule however I see this as pretty risky. Codesearch returns these impacts modules as well as all the core styles/scripts modules.

https://gerrit.wikimedia.org/g/mediawiki/extensions/WikiLove/+/43fe2a66447de583fdc2bb38bfec1f306908f4ab/extension.json#222
and https://gerrit.wikimedia.org/g/mediawiki/extensions/Gadgets/+/a7523dca5638a89cf0ad035201e71cd664920549/includes/GadgetResourceLoaderModule.php#12

The latter seems pretty risky, since it could lead to a lot of untested gadget code being unleashed on mobile so I think if we do the core change, we should also cautiously set gadgets (see also reply to wikitech-l thread)

I think we should eventually do this core change, but should likely make this happen in a later iteration.

I'd therefore advise we do the following:

  1. Merge https://gerrit.wikimedia.org/r/c/mediawiki/extensions/PageTriage/+/885881 that should unblock code changes in the PageTriage extension. Identify other issues in our our code.
  2. Let next weeks' train roll out. Monitor logs for any other problems.
  3. Run a User-notice about https://gerrit.wikimedia.org/r/885793
  4. Merge https://gerrit.wikimedia.org/r/885793 when user notice has been seen and community have had enough time to comment.

How does that sound?

Not doing this for ResourceLoaderModule was somewhat intentional to limit scope and impact of the change - it seems in the PageTriage case, a RL\FileModule is depending on a RL\WikiModule (which I believe is quite a rare situation). The change in https://gerrit.wikimedia.org/r/885793 would change the defaults for WikiModules as well as anything using Module directly.

In terms of Module: it is only used in https://codesearch.wmcloud.org/deployed/?q=extends%20ResourceLoaderModule&i=nope&files=&excludeFiles=&repos=
I'm not too worried about this, as I think the only thing this would effect is CurrencyRatesModule (the others explicitly set targets)

In terms of WikiModule however I see this as pretty risky. Codesearch returns these impacts modules as well as all the core styles/scripts modules.

https://gerrit.wikimedia.org/g/mediawiki/extensions/WikiLove/+/43fe2a66447de583fdc2bb38bfec1f306908f4ab/extension.json#222
and https://gerrit.wikimedia.org/g/mediawiki/extensions/Gadgets/+/a7523dca5638a89cf0ad035201e71cd664920549/includes/GadgetResourceLoaderModule.php#12

The latter seems pretty risky, since it could lead to a lot of untested gadget code being unleashed on mobile so I think if we do the core change, we should also cautiously set gadgets (see also reply to wikitech-l thread)

I think we should eventually do this core change, but should likely make this happen in a later iteration.

I'd therefore advise we do the following:

  1. Merge https://gerrit.wikimedia.org/r/c/mediawiki/extensions/PageTriage/+/885881 that should unblock code changes in the PageTriage extension. Identify other issues in our our code.
  2. Let next weeks' train roll out. Monitor logs for any other problems.
  3. Run a User-notice about https://gerrit.wikimedia.org/r/885793
  4. Merge https://gerrit.wikimedia.org/r/885793 when user notice has been seen and community have had enough time to comment.

How does that sound?

That sounds reasonable, thank you for thinking through the implications of that for gadget code.

Okay I've prepared for 3. I'll make sure that happens at earliest opportunity.

@Catrope has pointed out that gadgets will not be impacted by this change because the targets definition comes from https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/extensions/Gadgets/+/a7523dca5638a89cf0ad035201e71cd664920549/includes/Gadget.php#62

So actually the core change should be relatively safe - only CurrencyRatesModule and Wikilove. I have therefore rescinded my review.

Change 885788 merged by jenkins-bot:

[mediawiki/core@master] Adjust default targets in RL/Module

https://gerrit.wikimedia.org/r/885788

Change 885793 merged by jenkins-bot:

[mediawiki/core@master] ResourceLoader: Define targets in a single location

https://gerrit.wikimedia.org/r/885793

Change 888816 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/core@master] WIP: Error for any module that introduces bad targets

https://gerrit.wikimedia.org/r/888816

Change 271462 abandoned by Jforrester:

[mediawiki/core@master] resourceloader: Include mobile in default FileModule targets

Reason:

Done in Ia062ff2d8b8732b0d3498c1a614bbf6a3e3a7ddb.

https://gerrit.wikimedia.org/r/271462