From 1981e762c9b4601221c8cc3eaf5847b01899d20c Mon Sep 17 00:00:00 2001 From: Helmut Hummel <typo3@helhum.io> Date: Tue, 25 Feb 2020 23:19:35 +0100 Subject: [PATCH] [BUGFIX] Fix adding assets from uncached plugins MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AssetCollector is a singleton, but of course does not survive requests. Since uncached plugins should be able to access asset state from cached TypoScript or other uncached plugins, we must make sure this state is serialized in the cache (PageRenderer is serialized) and restored from cache. Releases: master Resolves: #90537 Change-Id: I6f954aecf0d83e0e81fca45167cdb31734af9e81 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/63433 Tested-by: TYPO3com <noreply@typo3.com> Tested-by: Susanne Moog <look@susi.dev> Tested-by: Georg Ringer <georg.ringer@gmail.com> Reviewed-by: Oliver Bartsch <bo@cedev.de> Reviewed-by: Christian Eßl <indy.essl@gmail.com> Reviewed-by: Susanne Moog <look@susi.dev> Reviewed-by: Oliver Klee <typo3-coding@oliverklee.de> Reviewed-by: Georg Ringer <georg.ringer@gmail.com> --- typo3/sysext/core/Classes/Page/PageRenderer.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/typo3/sysext/core/Classes/Page/PageRenderer.php b/typo3/sysext/core/Classes/Page/PageRenderer.php index 6dc7c5bc2287..58637e6c5a8c 100644 --- a/typo3/sysext/core/Classes/Page/PageRenderer.php +++ b/typo3/sysext/core/Classes/Page/PageRenderer.php @@ -323,6 +323,11 @@ class PageRenderer implements SingletonInterface */ protected $metaTagRegistry; + /** + * @var AssetCollector + */ + protected $assetCollector; + /** * @var FrontendInterface */ @@ -348,16 +353,18 @@ class PageRenderer implements SingletonInterface ]; $this->metaTagRegistry = GeneralUtility::makeInstance(MetaTagManagerRegistry::class); + $this->assetCollector = GeneralUtility::makeInstance(AssetCollector::class); $this->setMetaTag('name', 'generator', 'TYPO3 CMS'); } /** - * Set restored meta tag managers as singletons + * Set restored meta tag managers as singletons and asset collector * so that uncached plugins can use them to add or remove meta tags */ public function __wakeup() { GeneralUtility::setSingletonInstance(get_class($this->metaTagRegistry), $this->metaTagRegistry); + GeneralUtility::setSingletonInstance(get_class($this->assetCollector), $this->assetCollector); } /** @@ -1788,7 +1795,7 @@ class PageRenderer implements SingletonInterface $jsInline = ''; } // Use AssetRenderer to inject all JavaScripts and CSS files - $assetRenderer = GeneralUtility::makeInstance(AssetRenderer::class); + $assetRenderer = GeneralUtility::makeInstance(AssetRenderer::class, $this->assetCollector); $jsInline .= $assetRenderer->renderInlineJavaScript(true); $jsFooterInline .= $assetRenderer->renderInlineJavaScript(); $jsFiles .= $assetRenderer->renderJavaScript(true); -- GitLab