Commit graph

111 commits

Author SHA1 Message Date
Umherirrender
6fbea844cc resourceloader: Use UserIdentity in some cases
Created new ResourceLoaderContext::getUserIdentity

For anon requests no user identity is created.

Change-Id: I07084e8949a634dbb0b45e3fa51af2dbb28bdab4
2021-11-08 22:58:56 +01:00
jenkins-bot
b1a55d5b62 Merge "resourceloader: Fix nullable documentation for property and return types" 2021-11-08 21:54:06 +00:00
Umherirrender
808191ebc4 resourceloader: Change Context::getHash to always pass strings to implode
implode is documented as taking a string[], not mixed with int or null.
Explicitly cast or remove those instead of the implicit handling by PHP.

Change-Id: I0fac52c861bf85e09571b61a899b7a041aa77914
2021-11-03 00:32:42 +00:00
Umherirrender
d2baeb3083 resourceloader: Fix nullable documentation for property and return types
Change-Id: Ie8566c0e441d77ecd9cdf1220996deebdcd77fa7
2021-11-02 15:29:42 +01:00
Bartosz Dziewoński
2769e5f49b ResourceLoaderContext: Set message 'interface' flag and unique 'title'
Bug: T291601
Change-Id: I6375aa97faa794caad74546ebc5e7040ead38129
2021-10-08 00:15:33 +00:00
Umherirrender
0d390c46c9 resourceloader: Avoid repeatly calls to getter functions
Use local variable instead

Change-Id: If90f510558a138b2294a57c7bbb9dc53ea355f9c
2021-09-26 01:55:13 +02:00
Ammarpad
1cf4eab3ab ApiParse: Support hidden skins
Since $wgSkipSkins is meant to only 'remove skin from preferences',
it should not affect parsing with them.

So these skins need to be allowed here.

To achive this, this patch adds getInstalledSkins() method to SkinFactory
to provide the complete. The method supersedes getSkinNames() which does
the same thing but with ambiguous name.

Description of getAllowedSkins() has been corrected as it was slightly incorrect.

Bug: T237856
Change-Id: I0889b823d27f1a2830cc0205f5a21ed4de744e08
2021-09-20 09:29:24 +01:00
Umherirrender
2e4ee47c3d Cleanup mixed space/tab line indent
Change-Id: I833052a656b1ce419c0929f6f0514f2a33c2c4cc
2021-09-04 00:52:31 +02:00
libraryupgrader
5357695270 build: Updating dependencies
composer:
* mediawiki/mediawiki-codesniffer: 36.0.0 → 37.0.0
  The following sniffs now pass and were enabled:
  * Generic.ControlStructures.InlineControlStructure
  * MediaWiki.PHPUnit.AssertCount.NotUsed

npm:
* svgo: 2.3.0 → 2.3.1
  * https://npmjs.com/advisories/1754 (CVE-2021-33587)

Change-Id: I2a9bbee2fecbf7259876d335f565ece4b3622426
2021-07-22 03:36:05 +00:00
Petr Pchelko
92564edc7c Use Message::page instead of Message::title
Also modified new APIs added to ApiErrorFormatter to
use PageReference instead of Title.

Change-Id: I093c89f8e1e6d383603f887358be6ece70f23a02
2021-06-09 13:18:22 +00:00
Bartosz Dziewoński
067686756a resourceloader: Mark ResourceLoaderContext::encodeJson() as stable
Un-mark as @internal. It's a useful function for extensions that have
custom modules.

Example uses:
* Id8de16ab683948eae096b43462118ea837f53038
* Ia16dad8b6c450f4cb095a67af1c1c2b487e8536b

Change-Id: I03f0e7190fab62cd7e5c6a504a564142d0a9800d
2021-02-19 03:37:53 +00:00
Timo Tijhof
b04ec0dfca resourceloader: Add internal handling for debug=2
The canonical way to enable debug mode is and will remain
through via 'debug=true'.

During the transition debug=2 will opt you in to the experimental
newer way. Anything that needs to be pinned to the old way for
compat can already start doing so by using debug=1 explicitly.

Once v2 is "ready", the default will flip and debug=1 will remain
for the foreseeable future to trigger the legacy behaviours.

Bug: T85805
Change-Id: Ieaf04e0c289646dd5d5b027b4f1f8278167b2d57
2021-01-29 01:09:35 +00:00
Ammar Abdulhamid
ca1224dc44 Deprecate Skin methods moved to SkinFactory
* Skin::getAllowedSkins
* Skin::getSkinNames

Both are hard-deprecated and their equivalents in
SkinFactory should be used instead.

Bug: T257993
Depends-On: Ib8e4ec28f6755abec7e33476efefa78dcc2c6b78
Depends-On: Icc945ce1e3287a3b25152702818e5b2a90232677
Change-Id: I9595248ae5410361a5db50d1b95df1e513ac5a2c
2020-08-26 12:45:52 -07:00
Reedy
b80a9f4f6a Fix even more PSR12.Properties.ConstantVisibility.NotFound
Change-Id: I5e04824d6fa6a4c36ce489850bb0ed7b4ac588f9
2020-05-16 00:51:14 +01:00
Timo Tijhof
a3ce1f9da7 resourceloader: Add more granular phan type information in various classes
* Where possible and easy to figure out, change `array` to something like
  `array<K,V>` or `V[]` for improved static analysis to catch/prevent
  regressions in CI.

* Minor doc improvements:
  - consistently use the imperative mood for method briefs,
  - consistently use @internal instead of @private,
  - explain in @throws why they happen to inform when they should be caught
    (and remove if they are not meant to be caught/handled by any caller).

* Simplify addSources() implementation as a simple loop instead recursing
  (not worth the complexity, only called once or twice at runtime).

* Use more granular exceptions to distinguish between errors that indicate
  a mistake on the caller (logic/invalid arguments error), and runtime
  errors (which are more circumstantial).

* Update register() unit test for bad 'moduleInfo' type to use
  a nested value, given that the second-parameter level type is
  now verified by the signature already.

Change-Id: Id98ba1f28cb7f1c72f0a3e82f4151bcbd0f3db77
2020-02-21 23:54:33 +00:00
Derick A
c9df2ea4d6 resourceloader: Avoid use of deprecatd Language::isValidBuiltInCode()
Change-Id: I33b929b93017e36387d29cddcc494b997f646b67
2020-02-10 15:15:26 +01:00
jenkins-bot
17b931caf6 Merge "Remove Language::factory and getParentLanguage use" 2019-10-29 09:25:29 +00:00
Aryeh Gregor
0de9c47b50 Remove Language::factory and getParentLanguage use
Change-Id: I11f8801ef47ec1a1f63d840116e69667e6f3ae3c
2019-10-27 12:34:28 +02:00
Timo Tijhof
d3fdd4a3e7 resourceloader: Use PHP7 return hints in StartupModule and Context
Change-Id: I1aaa3a7274e84d2c872d7b75ea602aeeddd0a0c0
2019-10-19 00:33:35 +01:00
Umherirrender
8752df6592 Use varargs for MessageLocalizer::msg and similar
Bug: T191666
Change-Id: I59f2ae1a96af392026fc106e57d23553003c16b8
2019-10-05 17:47:49 +00:00
jenkins-bot
5155abe0e6 Merge "resourceloader: Add $context to static functions in ResourceLoader" 2019-09-27 20:48:15 +00:00
Fomafix
2fc229116d resourceloader: Add $context to static functions in ResourceLoader
This change allows to use the context in the functions.

The following internal static functions from ResourceLoader get now a
reference to the ResourceLoaderContext object:
* makeLoaderImplementScript
* makeLoaderStateScript
* makeLoaderRegisterScript
* makeLoaderSourcesScript

ResouceLoader::encodeJsonForScript is duplicated to
ResourceLoaderContext::encodeJson loading the debug mode from context.

ResourceLoader::encodeJsonForScript is kept for other usages without
context.

The debug mode is loaded from $context->getDebug() instead of from
ResourceLoader::inDebugMode(). This does not support to enable the debug
mode by setting the cookie 'resourceLoaderDebug' or the configuration
variable wgResourceLoaderDebug. Only the URL parameter debug=true
enables the debug mode. This should be sufficient for the subsequent
ResourceLoader requests. The tests don't need the global variable
wgResourceLoaderDebug anymore. The initial ResourceLoader context in
OutputPage still uses ResourceLoader::inDebugMode() with cookie and
global configuration variable.

This change adds the parameter $context with a ResourceLoaderContext
object to ResourceLoaderModule::getDeprecationInformation and deprecates
omitting the parameter. Ifa1a3bb56b731b83864022a358916c6aca5d7c10
updates this in extension ExtJSBase.

Bug: T229311
Change-Id: I5341f18625209446a6d006f60244990f65530319
2019-09-27 18:35:55 +02:00
Timo Tijhof
a5ce1d7792 resourceloader: Add Doxygen group and improve overall docs
* Add license header where missing.
* Add missing `@since` (1.17 for most classes), except
  ResourceLoaderLessVarFileModule since 1.32 (1bc62c548c).

* Remove duplicate file-level description for class-only files,
  merge with the class description instead.

* Remove my own `@author` annotation from one file.

* Mark core's own FileModule subclasses as `@internal`, except
  for the following which we support use of in extensions:
  ResourceLoaderLessVarFileModule,
  ResourceLoaderOOUIIconPackModule, and
  ResourceLoaderWikiModule.

Change-Id: I336af2e4ccdbe2512594e8861b72628d24194e41
2019-09-14 18:37:36 +00:00
Daimona Eaytoy
e70b5b3309 Unsuppress other phan issues (part 4)
Bug: T231636
Depends-On: I58e67c2b38389df874438deada4239510d21654f
Change-Id: I6e5fba7bd273219b1206559420b5bdb78734aa84
2019-08-31 17:13:39 +00:00
Daimona Eaytoy
5eac6d131c Unsuppress more phan issues (part 3)
Bug: T231636
Depends-On: I78354bf5f0c831108c8f606e50c87cf6bc00d8bd
Change-Id: I58e67c2b38389df874438deada4239510d21654f
2019-08-31 16:38:55 +00:00
Timo Tijhof
ebee319473 resourceloader: Add coverage for internal Context::getReqBase()
Change-Id: I068000f55f2100a6791470896d7f1050bdcb19a4
2019-08-25 19:03:04 +01:00
jenkins-bot
66ac8dbd43 Merge "context: Use getRawVal instead of getVal for 'uselang' and 'useskin'" 2019-07-31 23:07:22 +00:00
jenkins-bot
0cae3e1729 Merge "resourceloader: Remove deprecated ResourceLoaderContext::expandModuleNames" 2019-07-31 17:34:55 +00:00
Timo Tijhof
fb7bed3863 resourceloader: Hard-deprecate ResourceLoaderContext::getConfig
Already in 1.34 release notes from when it was soft-deprecated, earlier
this release cycle.

Depends-On: I949b91daabb0cf16519ef02e718ad97c827c4eec
Depends-On: Icf1ead8829268505709c71f46dede5cdfc4471a8
Change-Id: I471088b322848a779d0dd58651dc1bd0d49067f1
2019-07-31 13:40:32 +00:00
Timo Tijhof
4be9e389db resourceloader: Remove deprecated ResourceLoaderContext::expandModuleNames
Change-Id: If9aa389cc64cb41e60c865d586d644d9f3bca9b5
2019-07-30 15:28:21 +01:00
Timo Tijhof
cad882954a context: Use getRawVal instead of getVal for 'uselang' and 'useskin'
Bug: T189966
Change-Id: I9db7b3f36f5457e80aa9b673bcb56deb83e47a18
2019-07-30 00:02:52 +01:00
Fomafix
d13e5b757b resourceloader: Set the request base parameters on server-side
This change also removes the defaults from the URL parameter:
* lang=qqx
* skin=fallback
* debug=false

Bug: T225899
Change-Id: I4cbc42e39ebc56c3d29f773a275afe2b1a44c913
2019-06-26 22:47:21 +00:00
Fomafix
86a1f6f080 resourceloader: Define the default language and skin in constants
This allows to use the default values at several places.

Change-Id: I53f29c2162c4cac9caf672e816ebfeb97c452389
2019-06-19 15:52:58 +02:00
Fomafix
df65ef3061 resourceloader: Validate ResourceLoaderContext::getDirection() input
Only dir=ltr and dir=rtl are now allowed. Ignore other values.

Change-Id: Id39471e8a792c7c48ff7ca9d80be2e6dd4caee6b
2019-06-14 18:14:04 +00:00
Timo Tijhof
3656607b7d resourceloader: Deprecate ResourceLoaderContext::getConfig and ::getLogger
The methods existed for two use cases.

1. Inside ResourceLoaderContext, usage was removed with I4e4ee758cd22.
2. In Module class methods that get $context, already have their own
   Config and Logger instances injected from ResourceLoader::getModule(),
   which should be used instead.

Deprecating these opens the paths for making ResourceLoaderContext
a purer value object with no ResourceLoader, Config, or Logger objects
needing to be passed (in the future).

Bug: T32956
Change-Id: I74a9535918ea43b2c00073c5d4469f864d1eeb41
2019-06-13 18:28:58 +01:00
Timo Tijhof
fa05976f5f resourceloader: Remove needless MW-specific fallback
This is never used by the mw.loader client code. For any
manually crafted requests or fringe usage where the load.php
might be used to fetch some raw JS code that doesn't vary by
language or skin, proceed with qqx/fallback.

In the future load.php might deny these requests and then we
could make this a constructor parameter to ResourceLoaderContext.

Bug: T32956
Change-Id: I4e4ee758cd22278cea9592d4745b4f7fc00e0add
2019-04-15 17:46:41 +00:00
Timo Tijhof
f2bf73a4c4 resourceloader: Move expandModuleNames() to ResourceLoader.php
This has always been an odd case, as indicicated by the cross-class
comment references, and the fact that its test cases are already
in ResourceLoaderTest.php, for convenience, as that's also where
the creation of 'module name strings' is done and tested.

Actually move it there instead of pretending it is there.

Change-Id: Ied9569436cc78704a5c1b75eeebb73f8631350f6
2019-04-11 21:06:53 +00:00
Fomafix
f8ffc44c98 Fix IE conditional comment
47422fabe2 broke the IE conditional
comment. This is change restores them.

Change-Id: I397434e9c23506080fe5507b29c2cc48e2f078c7
2019-04-08 20:40:19 +02:00
Derick Alangi
f7c5be5b74 resourceloader: Fix typo in comment to make more sense
Change-Id: I5d519fcded529d022461a040efe0fe17e7c1c589
2019-04-04 18:39:54 +00:00
Timo Tijhof
9a4a754231 resourceloader: Replace ResourceLoaderDebug config use with context
Reduce our reliance on static state and configuration, and
propagate more state in explicit ways, through context, and
request parameters.

OutputPage creates ResourceLoaderContext and ResourceLoaderClientHtml
based on the configuration (via ResourceLoader::inDebugMode).

Everything within those classes should not need to check it
again.

* ResourceLoaderClientHtml:
  Already doesn't check MW config, but it's test was still
  mocking it. Removed now, and confirmed that it passes both
  with true and false. The individual test cases set
  debug=true/false as needed already.

  It's sets were previously relying on the accidental behaviour
  that within a unit test, we don't serialise over HTTP, which
  meant that a pure PHP boolean would survive. With the new
  raw `=== 'true'` check, this no longer works. Set it as a
  string explicitly instead, which is the only thing we support
  outside unit tests as well.

* ResourceLoaderContext:
  Remove fallback to MW config when 'debug' is unset.
  This is never unset in practice given that all load.php
  urls have it set by OutputPage based on ResourceLoader::inDebugMode.

  This change means that manually constructed ad-hoc load.php
  urls that are missing 'debug=' parameter, will now always be
  read as debug=false. This was the default already, but could
  previously be changed through wgResourceLoaderDebug.

When changing wgResourceLoaderDebug, everything will still have
debug=true as before. The only change is when constructing load.php
urls manually and explicitly not set it.

Bug: T32956
Change-Id: Ie3424be46e2b8311968f3068ca08ba6a1139224a
2019-03-08 20:33:16 +00:00
Timo Tijhof
92d6be8a38 resourceloader: Require $context parameter for FileModule::readStyleFiles()
Deprecated since MW 1.27.

Also update ResourcesTest to use TestingAccessWrapper instead of long-form
object reflection, and also apply it to its call for this method given
its meant to be private.

Change-Id: I9cc1af93730f632e4f8bf3a16d514a51ee73cb03
2019-02-18 19:05:24 +00:00
Timo Tijhof
a186dc62fd resourceloader: Instantiate main class via ServiceWiring
It also removes some code duplication which is nice.

This unlocks various future changes, including:

* Making the `$config` parameter mandatory for the ResourceLoader class
  constructor, which currently falls back to global state.
  This should be deprecated and removed.

* Making it possible to instantiate the ResourceLoader class
  without all the default MW modules being registered from
  global state. E.g. move MW module registration from main class
  constructor to ServiceWiring, and remove the 'EmptyResourceLoader'
  class hack from unit tests, and use regular 'new ResourceLoader'
  instead.

* Making ResourceLoader a standalone library (some day),
  e.g. allowing it to be instantiated from a basic PHP script,
  in a way that is still useful and perhaps able to serve
  (most) RL modules without MW itself.

Bug: T32956
Change-Id: I4939f296c705b268e9cf8de635e923a739410470
2019-02-18 17:55:09 +00:00
Roan Kattouw
7e148dfbf0 resourceloader: Add getConfig() method to ResourceLoaderContext
Change-Id: I38ece7320adab64113c5d2a91056d5522f369367
2018-12-09 01:46:38 +00:00
Max Semenik
6e956d55aa Replace call_user_func_array(), part 2
Uses new PHP 5.6 syntax like ...parameter unpacking and
calling anything looking like a callback to make the code more readable.
There are much more occurrences but this commit is intentionally limited
to an easily reviewable size.

In one occurrence, a simple conditional instead of trickery was much more readable.

This patch finishes all the easy stuf in the core, the remainder is either unobvious
or would result in smaller readability gains. It will be carefully dealt with in
further commits.

Change-Id: I79a16c48bfb98b75e5b99f2f6f4fa07b3ae02c5b
2018-06-07 20:19:26 -07:00
Brad Jorsch
3f1142045f Generalize ResourceLoader 'excludepage' functionality
There has long been a hack for previewing edits to user JS/CSS, where
OutputPage would pass an 'excludepage' parameter to
ResourceLoaderUserModule to tell it not to load one particular page and
would instead embed that page statically. That's nice, but there are
other places where we could use the same thing.

This patch generalizes it:
* DerivativeResourceLoaderContext may now contain a callback for mapping
  titles to replacement Content objects.
* ResourceLoaderWikiModule::getContent() uses the overrides, and
  requests embedding when they're used. All subclasses in Gerrit should
  pick it up automatically.
* OutputPage gains methods for callers to add to the override mapping,
  which it passes on to RL. It loses a bunch of the special casing it
  had for the 'user' and 'user.styles' modules.
* EditPage sets the overrides on OutputPage when doing the preview, as
  does ApiParse for prop=headhtml. TemplateSandbox does too in I83fa0856.
* OutputPage::userCanPreview() gets less specific to editing user CSS
  and JS, since RL now handles the embedding based on the actual
  modules' dependencies and EditPage only requests it on preview.

ApiParse also gets a new hook to support TemplateSandbox's API
integration (used in I83fa0856).

Bug: T112474
Change-Id: Ib9d2ce42931c1de8372e231314a1f672d7e2ac0e
2018-04-25 00:37:08 +00:00
Timo Tijhof
558b007585 resourceloader: Use getRawVal instead of slower getVal in StartupModule
For the same reasons as in ResourceLoaderContext. The only valid values
here are known strings like "desktop" and "mobile". No Language/UTF
normalisation required.

Ensures that Language instance won't get initialised just for this.

Change-Id: If219463d80a66132786710184329388080fbe713
2018-03-22 07:04:28 +00:00
Timo Tijhof
dc8550ea24 resourceloader: Clean up and better document module list (un)packing
* Move buildModulesString() call from doRequest() to batchRequest()

  This keeps all module string "packing" logic located to the same function,
  which is batchRequest(). It also means that the moduleMap object will not
  leave the function, which helps in maintenance given it's very internal.

* Add comments to all the methods referring to each other.

* Explain why buildModulesString() is only a partial port, and the rest is
  inlined in batchRequest().

* Minor changes to the JS and PHP implementation to better match each other.
  - '$groups' -> '$moduleMap'.
  - Remove redundant '$str'.

Bug: T188076
Change-Id: I7b0790606c456e492ab682faeb80f7e7fce7d9f8
2018-03-06 15:59:13 -08:00
Niklas Laxström
a6c9c21983 Remove unuseful debug messages
I spotted one of these in my debug log. Without context it is not
useful nor informative. Given it can actually come from three places,
it is useless.

Change-Id: Ic293d8944e9a1a8152c5a5e0b695c5ddc07ee6aa
2017-12-04 10:40:05 +00:00
Umherirrender
ace44e2064 Use correct variable name in @param documentation
For some varargs a variable name is added with suffix ,... as seen for
many other varargs

Some @param are swapped, because there are in the wrong order

Enable Sniff MediaWiki.Commenting.FunctionComment.ParamNameNoMatch

Change-Id: I60fec6025bce824d5c67563ab7b65ad6cd628ad8
2017-08-11 19:27:19 +02:00
Amir Sarabadani
d062560f24 Require $key in msg() functions
Note: calling msg() with no parameter was never supported,
doing this on a RequestContext for example would result in:
PHP Warning:  Missing argument 1 for wfMessage() ...followed
by a bunch of fallout.

So this patch only formally declares what was already a
requirement in reality.

Change-Id: I1864afb8bcc641698689828914949a06506d8f3a
2017-06-14 13:26:27 +04:30