기여 목록 / 8402597
FSA: Resolve native file MIME types using platform mappings
네이티브 파일의 getFile()에서 운영체제 MIME 매핑도 확인하도록 변경했습니다. 플랫폼이 인식하는 파일 형식에는 해당 MIME 타입을 제공하면서, OPFS 파일은 기존의 기본 매핑만 사용하도록 유지했습니다.
문제 설명
FileSystemFileHandle.getFile()은 파일 확장자를 MIME 타입으로 변환할 때 Chromium에 내장된 기본 매핑만 사용했습니다. 운영체제가 QuickTime .mov 같은 형식을 인식하더라도 기본 매핑에 없으면 반환된 File의 type은 빈 문자열이었습니다.
운영체제 MIME 데이터베이스 조회는 차단 작업이 될 수 있어 기존의 IO 시퀀스에서 바로 호출할 수 없습니다. 반대로 OPFS의 파일 이름은 사이트가 정할 수 있으므로, 그 이름으로 플랫폼 매핑을 조회하면 사용자가 설치한 애플리케이션과 연관된 정보를 사이트에 노출할 수 있습니다.
해결 내용
네이티브 파일에 플랫폼 MIME 매핑 적용
file_system_access_file_handle_impl.cc에서 네이티브 파일에는 표시 이름으로net::GetMimeTypeFromFile()을 호출합니다. 이 함수의 기본·플랫폼·보조 매핑 조회 순서를 사용하므로, 기본 매핑에 없는 형식도 운영체제가 알고 있으면 MIME 타입을 얻습니다. 조회에 실패하면 기존처럼 빈File.type을 사용합니다.차단 작업과 핸들 수명 처리
MIME 조회는
base::MayBlock()이 지정된 ThreadPool 작업으로 옮겼습니다. 조회 결과가 원래 시퀀스로 돌아오면DidResolveMimeTypeForBlob()에서 Blob을 생성합니다. 응답은 핸들의WeakPtr에 연결하여, 조회 중 핸들이 파괴되면 더 이상 콜백을 실행하지 않습니다.OPFS에서 플랫폼 매핑 제외
OPFS에는
net::GetWellKnownMimeTypeFromFile()만 사용합니다. 사이트가 선택한 파일 이름으로 운영체제 매핑을 조회하지 않도록 하면서,image/png등 기존의 기본 MIME 타입은 계속 제공합니다.
file_system_access_file_handle_impl.cc, .h와 단위 테스트 파일을 수정했습니다.
테스트 방법
file_system_access_file_handle_impl_unittest.cc에 네이티브 파일과 OPFS용 AsBlob 테스트를 추가했습니다.
| 테스트 | 검증 내용 |
|---|---|
PlatformMimeType |
플랫폼이 .mov를 인식하면 네이티브 파일의 MIME 타입에 반영합니다. Windows에서는 격리된 레지스트리에 QuickTime 매핑을 등록해 검사합니다. |
PlatformOverridesSecondaryMimeType |
Windows에서 플랫폼의 .txt 매핑이 보조 매핑보다 우선하는지 확인합니다. |
WellKnownMimeType, UnknownMimeType, NoExtension |
기본 매핑이 있는 확장자와 매핑이 없거나 확장자가 없는 파일의 반환값을 확인합니다. |
UsesDisplayName |
저장 경로의 이름이 아니라 핸들의 표시 이름을 기준으로 MIME 타입을 결정합니다. |
DestroyHandleWhileMimeTypeLookupPending |
조회 작업이 대기 중일 때 핸들을 파괴하면 결과 콜백이 실행되지 않습니다. |
OPFS용 DoesNotUsePlatformMimeType, WellKnownMimeType |
OPFS에서 플랫폼 매핑을 노출하지 않으면서 기본 MIME 타입은 유지합니다. |
Gerrit 기록상 Patch Set 9는 2026년 9월 24일 CQ dry run을 통과했습니다. 9월 28일에는 코드 리뷰 승인 후 Commit-Queue +2로 full run이 시작되었습니다. 위 내용은 패치와 Gerrit 기록을 기준으로 정리했으며, 보고서 작성 과정에서 Chromium 테스트를 별도로 실행하지는 않았습니다.
배운 점
- MIME 조회는 내장 매핑과 플랫폼 매핑의 순서에 따라 결과가 달라질 수 있으므로, 단순히 확장자만 보는 테스트로는 우선순위를 확인할 수 없습니다.
- 운영체제 설정을 조회하는 작업은 차단될 수 있으므로 작업 스레드에서 실행하고, 원래 시퀀스에서 결과를 사용해야 합니다.
- 비동기 작업의 응답이 도착하기 전에 핸들이 사라질 수 있으므로
WeakPtr로 수명을 확인해야 합니다. - 사이트가 이름을 자유롭게 정하는 OPFS에는 플랫폼 MIME 연결 정보를 사용하지 않아야 사용자 환경 정보가 드러나지 않습니다.