Merged r23857 from trunk to 5.1-stable (#42839).

git-svn-id: https://svn.redmine.org/redmine/branches/5.1-stable@23864 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Go MAEDA
2025-07-06 05:00:41 +00:00
parent eedc0001be
commit e93a9bc560
2 changed files with 30 additions and 1 deletions

View File

@@ -156,7 +156,15 @@ class RepositoriesController < ApplicationController
# Force the download
send_opt = {:filename => filename_for_content_disposition(@path.split('/').last)}
send_type = Redmine::MimeType.of(@path)
send_opt[:type] = send_type.to_s if send_type
case send_type
when nil
# No MIME type detected. Let Rails use the default type.
when 'application/javascript'
# Avoid ActionController::InvalidCrossOriginRequest exception by setting non-JS content type
send_opt[:type] = 'text/plain'
else
send_opt[:type] = send_type
end
send_opt[:disposition] = disposition(@path)
send_data @repository.cat(@path, @rev), send_opt
else

View File

@@ -357,6 +357,27 @@ class RepositoriesSubversionControllerTest < Redmine::RepositoryControllerTest
assert_equal "attachment; filename=\"helloworld.c\"; filename*=UTF-8''helloworld.c", @response.headers['Content-Disposition']
end
def test_entry_should_return_text_plain_for_js_files
# JavaScript files should be served as 'text/plain' instead of
# 'application/javascript' to avoid
# ActionController::InvalidCrossOriginRequest exception
assert_equal 0, @repository.changesets.count
@repository.fetch_changesets
@project.reload
assert_equal NUM_REV, @repository.changesets.count
get(
:raw,
:params => {
:id => PRJ_ID,
:repository_id => @repository.id,
:path => repository_path_hash(['subversion_test', 'foo.js'])[:param]
}
)
assert_response :success
assert_equal 'text/plain', @response.media_type
assert_match /attachment/, @response.headers['Content-Disposition']
end
def test_directory_entry
assert_equal 0, @repository.changesets.count
@repository.fetch_changesets