diff --git a/core/modules/system/src/Controller/CssAssetController.php b/core/modules/system/src/Controller/CssAssetController.php index 32fdcf6..10404b3 100644 --- a/core/modules/system/src/Controller/CssAssetController.php +++ b/core/modules/system/src/Controller/CssAssetController.php @@ -15,13 +15,18 @@ class CssAssetController extends AssetControllerBase { use AssetGroupSetHashTrait; /** - * {@inheritdoc} + * The content type. + * + * @var string */ - public function __construct($library_dependency_resolver, $asset_resolver, $theme_initialization, $theme_manager, $grouper, $optimizer, $dumper) { - $this->contentType = 'text/css'; - $this->assetType = 'css'; - parent::__construct($library_dependency_resolver, $asset_resolver, $theme_initialization, $theme_manager, $grouper, $optimizer, $dumper); - } + protected $contentType = 'text/css'; + + /** + * The asset type. + * + * @var string + */ + protected $assetType = 'css'; /** * {@inheritdoc} @@ -34,7 +39,8 @@ public static function create(ContainerInterface $container) { $container->get('theme.manager'), $container->get('asset.css.collection_grouper'), $container->get('asset.css.collection_optimizer'), - $container->get('asset.css.dumper') + $container->get('asset.css.dumper'), + $container->get('state') ); } diff --git a/core/modules/system/src/Controller/JsAssetController.php b/core/modules/system/src/Controller/JsAssetController.php index 78ecfa3..4e7e091 100644 --- a/core/modules/system/src/Controller/JsAssetController.php +++ b/core/modules/system/src/Controller/JsAssetController.php @@ -16,13 +16,18 @@ class JsAssetController extends AssetControllerBase { use AssetGroupSetHashTrait; /** - * {@inheritdoc} + * The content type. + * + * @var string */ - public function __construct($library_dependency_resolver, $asset_resolver, $theme_initialization, $theme_manager, $grouper, $optimizer, $dumper) { - $this->contentType = 'application/javascript'; - $this->assetType = 'js'; - parent::__construct($library_dependency_resolver, $asset_resolver, $theme_initialization, $theme_manager, $grouper, $optimizer, $dumper); - } + protected $contentType = 'application/javascript'; + + /** + * The asset type. + * + * @var string + */ + protected $assetType = 'css'; /** * {@inheritdoc} @@ -35,7 +40,8 @@ public static function create(ContainerInterface $container) { $container->get('theme.manager'), $container->get('asset.js.collection_grouper'), $container->get('asset.js.collection_optimizer'), - $container->get('asset.js.dumper') + $container->get('asset.js.dumper'), + $container->get('state') ); } diff --git a/core/tests/Drupal/FunctionalTests/Asset/AssetOptimizationTest.php b/core/tests/Drupal/FunctionalTests/Asset/AssetOptimizationTest.php new file mode 100644 index 0000000..dbc0a5d --- /dev/null +++ b/core/tests/Drupal/FunctionalTests/Asset/AssetOptimizationTest.php @@ -0,0 +1,77 @@ +config('system.performance')->set('css', ['preprocess' => TRUE, 'gzip' => TRUE])->save(); + $this->config('system.performance')->set('js', ['preprocess' => TRUE, 'gzip' => TRUE])->save(); + $user = $this->createUser(); + $this->drupalLogin($user); + $this->drupalGet(''); + $session = $this->getSession(); + $page = $session->getPage(); + + $elements = $page->findAll('xpath', '//link[@rel="stylesheet"]'); + $urls = []; + foreach ($elements as $element) { + if ($element->hasAttribute('href')) { + $urls[] = $element->getAttribute('href'); + } + } + foreach ($urls as $url) { + $this->assertAggregate($url, TRUE); + } + foreach ($urls as $url) { + $this->assertAggregate($url, FALSE); + } + + $elements = $page->findAll('xpath', '//script'); + $urls = []; + foreach ($elements as $element) { + if ($element->hasAttribute('src')) { + $urls[] = $element->getAttribute('src'); + } + } + foreach ($urls as $url) { + $this->assertAggregate($url, TRUE); + } + foreach ($urls as $url) { + $this->assertAggregate($url, FALSE); + } + } + + protected function assertAggregate($url, $from_php = TRUE) { + $session = $this->getSession(); + $query = []; + $parts = parse_url($url); + parse_str($parts['query'], $query); + $this->drupalGet($parts['path'], ['query' => $query]); + $page = $session->getPage(); + $this->assertResponse(200); + $headers = $session->getResponseHeaders(); + if ($from_php) { + $this->assertEqual($headers['Cache-Control'], ['no-store, private']); + } + else { + $this->assertTrue(!isset($headers['Cache-Control'])); + } + } + +}