Skip to content

Commit 5381ca8

Browse files
committed
Task #207 Stage 3: Firefox interceptor에 공통 판정 적용 + 이중 콜백 유지
- rhwp-firefox/sw/download-interceptor.js - 로컬 HWP_EXTENSIONS 정규식 제거 → 공통 모듈 shouldInterceptDownload 사용 - onCreated: url 외에 mime/referrer 까지 자동 평가 (Chrome 동등) - onChanged: filename 매칭만 하던 단순 체크 → 공통 판정 함수로 교체 · DEXT5 referrer 차단, MIME 힌트, finalUrl 검사 자동 적용 (#198 패리티) - onCreated+onChanged 이중 콜백 구조는 그대로 유지 (Firefox MV3 제약) Refs #207
1 parent e741137 commit 5381ca8

1 file changed

Lines changed: 15 additions & 16 deletions

File tree

rhwp-firefox/sw/download-interceptor.js

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,37 @@
11
// 다운로드 가로채기 (Firefox 버전)
2-
// - onCreated: URL 기반 즉시 감지 (1차 판정)
3-
// - onChanged: filename 확정 시 재판정 (2차 판정)
4-
// - browser.downloads.search로 최신 DownloadItem 재조회
2+
// - onCreated: url/mime/referrer 기반 1차 판정 (filename 미확정일 수 있음)
3+
// - onChanged: filename 확정 시 2차 판정
4+
// - browser.downloads.search 로 최신 DownloadItem 재조회
55
// - handled 집합으로 동일 다운로드 중복 처리 방지
6+
//
7+
// #207: 판정 로직은 rhwp-shared/sw/download-interceptor-common.js 와 공유.
8+
// Chrome 과 동일한 DEXT5 블랙리스트 / MIME 힌트 / finalUrl 검사 자동 적용.
69

710
import { openViewer } from './viewer-launcher.js';
11+
import { shouldInterceptDownload } from './download-interceptor-common.js';
812

9-
const HWP_EXTENSIONS = /\.(hwp|hwpx)(\?.*)?$/i;
1013
const handled = new Set(); // 이미 처리된 downloadId
1114

1215
export function setupDownloadInterceptor() {
13-
// 1차: 다운로드 시작 시 URL 기반 즉시 감지
16+
// 1차: 다운로드 시작 시 url/mime/referrer 로 즉시 판정
1417
browser.downloads.onCreated.addListener((item) => {
1518
if (handled.has(item.id)) return;
1619

17-
if (HWP_EXTENSIONS.test(item.url || '')) {
20+
if (shouldInterceptDownload(item)) {
1821
handled.add(item.id);
1922
handleHwpDownload(item);
2023
}
21-
// URL로 판별 불가 시: filename 확정될 때 onChanged에서 재판정
24+
// 판정 불가 시: filename 확정될 때 onChanged에서 재판정
2225
});
2326

2427
// 2차: filename 확정 시 재판정
2528
browser.downloads.onChanged.addListener(async (delta) => {
26-
// filename 확정으로 HWP가 처음 판정되는 경우에만 처리
27-
if (!handled.has(delta.id)
28-
&& delta.filename?.current
29-
&& HWP_EXTENSIONS.test(delta.filename.current)) {
30-
handled.add(delta.id);
31-
29+
// 아직 미처리 + filename 확정 → 최신 DownloadItem 으로 재판정
30+
if (!handled.has(delta.id) && delta.filename?.current) {
3231
try {
33-
// 최신 DownloadItem 재조회 (url, fileSize 등 완전한 정보 확보)
3432
const [item] = await browser.downloads.search({ id: delta.id });
35-
if (item) {
33+
if (item && shouldInterceptDownload(item)) {
34+
handled.add(delta.id);
3635
handleHwpDownload(item);
3736
}
3837
} catch (err) {
@@ -61,7 +60,7 @@ async function handleHwpDownload(item) {
6160

6261
openViewer({
6362
url: item.url,
64-
filename: item.filename
63+
filename: item.filename,
6564
});
6665
} catch (err) {
6766
console.error('[rhwp] 다운로드 인터셉터 오류:', err);

0 commit comments

Comments
 (0)