Skip to content
Snippets Groups Projects
Verified Commit 6c8799d1 authored by Lee Rowlands's avatar Lee Rowlands
Browse files

Issue #3371358 by catch, tikaszvince, smustgrave, larowlan: When...

Issue #3371358 by catch, tikaszvince, smustgrave, larowlan: When AssetControllerBase delivers existing file should add content-type

(cherry picked from commit cccf3c6c)
parent f9ce74cf
No related branches found
No related tags found
19 merge requests!7564Revert "Issue #3364773 by roshnichordiya, Chris Matthews, thakurnishant_06,...,!5752Issue #3275828 by joachim, quietone, bradjones1, Berdir: document the reason...,!5627Issue #3261805: Field not saved when change of 0 on string start,!5427Issue #3338518: send credentials in ajax if configured in CORS settings.,!5395Issue #3387916 by fjgarlin, Spokje: Each GitLab job exposes user email,!5217Issue #3386607 by alexpott: Improve spell checking in commit-code-check.sh,!5064Issue #3379522 by finnsky, Gauravvvv, kostyashupenko, smustgrave, Chi: Revert...,!5040SDC ComponentElement: Transform slots scalar values to #plain_text instead of throwing an exception,!4958Issue #3392147: Whitelist IP for a Ban module.,!4894Issue #3280279: Add API to allow sites to opt in to upload SVG images in CKEditor 5,!4857Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!4856Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!4788Issue #3272985: RSS Feed header reverts to text/html when cached,!4716Issue #3362929: Improve 400 responses for broken/invalid image style routes,!4553Draft: Issue #2980951: Permission to see own unpublished comments in comment thread,!3679Issue #115801: Allow password on registration without disabling e-mail verification,!3106Issue #3017548: "Filtered HTML" text format does not support manual teaser break (<!--break-->),!925Issue #2339235: Remove taxonomy hard dependency on node module,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links
......@@ -117,7 +117,12 @@ public function deliver(Request $request, string $file_name) {
// Check to see whether a file matching the $uri already exists, this can
// happen if it was created while this request was in progress.
if (file_exists($uri)) {
return new BinaryFileResponse($uri, 200, ['Cache-control' => static::CACHE_CONTROL]);
return new BinaryFileResponse($uri, 200, [
'Cache-control' => static::CACHE_CONTROL,
// @todo: remove the explicit setting of Content-Type once this is
// fixed in https://www.drupal.org/project/drupal/issues/3172550.
'Content-Type' => $this->contentType,
]);
}
// First validate that the request is valid enough to produce an asset group
......
<?php
declare(strict_types=1);
namespace Drupal\FunctionalTests\Asset;
use Drupal\Component\Utility\UrlHelper;
......@@ -99,8 +101,15 @@ protected function doTestAggregation(array $settings): void {
$script_urls[] = $element->getAttribute('src');
}
foreach ($style_urls as $url) {
$this->assertAggregate($url);
$this->assertAggregate($url, FALSE);
$this->assertAggregate($url, TRUE, 'text/css');
// Once the file has been requested once, it's on disk. It is possible for
// a second request to hit the controller, and then find that another
// request has created the file already. Actually simulating this race
// condition is not really possible since it relies on timing. However, by
// changing the case of the part of the URL that is handled by Drupal
// routing, we can force the request to be served by Drupal.
$this->assertAggregate(str_replace($this->fileAssetsPath, strtoupper($this->fileAssetsPath), $url), TRUE, 'text/css');
$this->assertAggregate($url, FALSE, 'text/css');
$this->assertInvalidAggregates($url);
}
......@@ -118,19 +127,23 @@ protected function doTestAggregation(array $settings): void {
* The source URL.
* @param bool $from_php
* (optional) Is the result from PHP or disk? Defaults to TRUE (PHP).
* @param string|null $content_type
* The expected content type, or NULL to skip checking.
*/
protected function assertAggregate(string $url, bool $from_php = TRUE): void {
protected function assertAggregate(string $url, bool $from_php = TRUE, string $content_type = NULL): void {
$url = $this->getAbsoluteUrl($url);
// Not every script or style on a page is aggregated.
if (!str_contains($url, $this->fileAssetsPath)) {
if (!stripos($url, $this->fileAssetsPath) !== FALSE) {
return;
}
$session = $this->getSession();
$session->visit($url);
$this->assertSession()->statusCodeEquals(200);
$headers = $session->getResponseHeaders();
if (isset($content_type)) {
$this->assertStringContainsString($content_type, $headers['Content-Type'][0]);
}
if ($from_php) {
$this->assertEquals(['no-store, private'], $headers['Cache-Control']);
$this->assertStringContainsString('no-store', $headers['Cache-Control'][0]);
$this->assertArrayHasKey('X-Generator', $headers);
}
else {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment