Skip to content

Task #207: Firefox download-interceptor에 #198 판정 로직 반영 (공통 모듈 추출)#214

Merged
edwardkim merged 6 commits into
edwardkim:develfrom
postmelee:fix/issue-207-download-interceptor-common
Apr 20, 2026
Merged

Task #207: Firefox download-interceptor에 #198 판정 로직 반영 (공통 모듈 추출)#214
edwardkim merged 6 commits into
edwardkim:develfrom
postmelee:fix/issue-207-download-interceptor-common

Conversation

@postmelee

@postmelee postmelee commented Apr 20, 2026

Copy link
Copy Markdown
Collaborator

요약

#207 해결. PR #169 으로 merge된 Firefox 확장의 download-interceptor.js가 Chrome에서 #198 로 해결한 두 가지 핵심 로직(NON_REFETCHABLE_PATTERNS DEXT5 차단, HWP_MIME_HINTS MIME 판정, finalUrl·referrer 검사)을 반영하지 못한 격차를 메운다.

전략: 리스너 구조는 플랫폼별로 유지(Chrome onDeterminingFilename vs Firefox onCreated+onChanged 이중 콜백)하되, 순수 판정 함수만 rhwp-shared/sw/download-interceptor-common.js로 추출해 양쪽이 공유. 드리프트 방지(한 번 수정 → 양쪽 반영).

변경 내역 (4단계 커밋)

  • Stage 1 (0343eae): rhwp-shared/sw/download-interceptor-common.js 신규 — shouldInterceptDownload(item) 순수 함수, HWP_EXTENSION_RE, HWP_MIME_HINTS, NON_REFETCHABLE_PATTERNS 추출. 각 extension sw/에 심볼릭 링크.
  • Stage 2 (e741137): Chrome download-interceptor.js를 공통 모듈 의존으로 축약. onDeterminingFilename 단일 콜백 + 기본 동작(마지막 저장 위치 기억) 보존(rhwp-chrome 다운로드 인터셉터 부작용: 일반 파일 저장 시 마지막 위치 미기억 (chrome-fd-001) #198).
  • Stage 3 (5381ca8): Firefox download-interceptor.js의 이중 콜백(onCreated 1차 + onChanged 2차 재판정)은 유지하고 판정만 shouldInterceptDownload로 교체. DEXT5 referrer 차단·MIME 힌트가 자동으로 적용됨.
  • Stage 4 (75b8e0b): Chrome 단위 테스트(20+ 케이스)를 rhwp-shared/sw/download-interceptor-common.test.js로 이전 + Firefox 특화 시나리오(불완전 onCreated item, MIME 단독 감지, onChanged 재판정) 3건 추가. build.mjscpSync({ dereference: true }) 추가해 패키징 시 심링크가 실체 파일로 변환되도록 함.

아키텍처 차이 (Chrome vs Firefox)

플랫폼 콜백 구조 공유 가능한 부분
Chrome onDeterminingFilename 단일 콜백 판정 함수
Firefox onCreated(1차) + onChanged(2차 재판정) 판정 함수

리스너 통합은 불가하지만 판정 로직은 동일 — 그래서 순수 함수만 공통화.

파일 변경 목록

  • rhwp-shared/sw/download-interceptor-common.js (신규, 원본)
  • rhwp-shared/sw/download-interceptor-common.test.js (Chrome에서 이전 + Firefox 케이스 추가)
  • rhwp-chrome/sw/download-interceptor-common.js → 심볼릭 링크
  • rhwp-firefox/sw/download-interceptor-common.js → 심볼릭 링크
  • rhwp-chrome/sw/download-interceptor.js (재작성, 축약)
  • rhwp-firefox/sw/download-interceptor.js (재작성, 이중 콜백 유지)
  • rhwp-chrome/sw/download-interceptor.test.js (삭제 — rhwp-shared로 이전)
  • rhwp-chrome/build.mjs, rhwp-firefox/build.mjs (dereference: true 추가)

검증

관련

claude and others added 6 commits April 20, 2026 02:06
Task edwardkim#207 구현의 베이스 — Firefox 확장 포팅 코드와 Chrome의 edwardkim#198 수정본을
작업 브랜치에 병합한다.
- rhwp-shared/sw/download-interceptor-common.js 신규
  - HWP_EXTENSION_RE, HWP_MIME_HINTS, NON_REFETCHABLE_PATTERNS
  - shouldInterceptDownload(item) 순수 함수
- rhwp-chrome/sw/, rhwp-firefox/sw/ 에 동일 파일명 symlink 배치
  (dev: 직접 참조 / build: cpSync dereference 로 실체 복사)

Refs edwardkim#207
- rhwp-chrome/sw/download-interceptor.js
  - HWP_EXTENSION_RE / HWP_MIME_HINTS / NON_REFETCHABLE_PATTERNS / shouldInterceptDownload
    정의 제거 → 공통 모듈에서 import
  - 리스너 구조와 handleHwpDownload 로직은 동등
- download-interceptor.test.js: import 경로를 공통 모듈로 변경
  (23건 전부 통과 — node --test)

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

Refs edwardkim#207
…erence

- rhwp-chrome/sw/download-interceptor.test.js 삭제
- rhwp-shared/sw/download-interceptor-common.test.js 신규 (기존 23건 + Firefox 특화 3건)
  · Firefox onCreated: url/mime/referrer 단독 감지
  · Firefox onChanged: filename 확정 후 일반 파일 미감지
- rhwp-chrome/build.mjs, rhwp-firefox/build.mjs
  · sw/ 복사 시 dereference: true 추가 — 심링크를 실체 파일로 복사
  · Firefox copy() 헬퍼에 options 인자 추가 + EXCLUDE_FROM_DIST 도입
- node --test: 26 pass / 0 fail

closes edwardkim#207
@edwardkim edwardkim merged commit aca6f7a into edwardkim:devel Apr 20, 2026
6 checks passed
edwardkim added a commit that referenced this pull request Apr 20, 2026
2026-04-20~21 사이클 정리:

PR 처리 9건:
- admin merge 5: #209 #214 #215 #221 #224
- cherry-pick + close 2: #213 (+중복 #210 close), #181 (+golden 재생성)
- dependabot close 2: #211 #212 (devel 수동 bump + target-branch=devel 설정)
- 보류 1: #165 skia (별도 사이클)

이슈 close 7: #173 #195 #202 #205 #207 #210 #222
신규 이슈 등록 1: #204 (표 Undo/Redo)

Chrome Web Store / Edge Add-ons v0.2.1 심사 통과 (2026-04-21).

local/task205 폐기: PR #209+#214 가 중복 처리하여 잔여 고유 기여 분리 곤란.

기여자 7명 감사 기록.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request Apr 21, 2026
한글판 README.md 와 영문판 README_EN.md 의 섹션 구조·내용을 1:1 일치시킴.

주요 변경:
- Roadmap + Milestones 섹션을 상단(로드맵/이정표 위치) 으로 이동
- v0.5.0 ~ v0.7.x 이정표에 v0.2.1 사이클 전체 반영 (Chrome/Edge 심사 통과, PR #213/#215/#221/#169/#209/#214/#224/#181)
- rhwp-firefox (v0.1.1 AMO 준비) + rhwp-safari (v0.2.1) 섹션 추가
- 기여자 감사 목록 확장: @seo-rii, @planet6897, @yl-star7 추가 (9명)
- Features: OLE/Chart/EMF native rendering 항목 추가 (#221)
- Project Structure: src/emf/, src/ooxml_chart/, rhwp-firefox/, rhwp-shared/ 반영
- Trademark 섹션 신규 (한글판 동일 위치)
- AI 페어 프로그래밍 섹션: Git Workflow / Task Workflow / Debugging Protocol / Documentation Rules 완전 반영
- 로드맵 링크를 mydocs/eng/report/rhwp-milestone.md 로 보정
- 테스트 수치 783 → 935

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request Apr 22, 2026
한글판 README.md 와 영문판 README_EN.md 의 섹션 구조·내용을 1:1 일치시킴.

주요 변경:
- Roadmap + Milestones 섹션을 상단(로드맵/이정표 위치) 으로 이동
- v0.5.0 ~ v0.7.x 이정표에 v0.2.1 사이클 전체 반영 (Chrome/Edge 심사 통과, PR #213/#215/#221/#169/#209/#214/#224/#181)
- rhwp-firefox (v0.1.1 AMO 준비) + rhwp-safari (v0.2.1) 섹션 추가
- 기여자 감사 목록 확장: @seo-rii, @planet6897, @yl-star7 추가 (9명)
- Features: OLE/Chart/EMF native rendering 항목 추가 (#221)
- Project Structure: src/emf/, src/ooxml_chart/, rhwp-firefox/, rhwp-shared/ 반영
- Trademark 섹션 신규 (한글판 동일 위치)
- AI 페어 프로그래밍 섹션: Git Workflow / Task Workflow / Debugging Protocol / Documentation Rules 완전 반영
- 로드맵 링크를 mydocs/eng/report/rhwp-milestone.md 로 보정
- 테스트 수치 783 → 935

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request Apr 23, 2026
…ot 반영)

피드백 mydocs/feedback/manual_currency_audit.md 결정 반영. 최근 사이클의 주요 변경을
매뉴얼에 동기화하고, PR 처리 절차 매뉴얼을 신설.

[A] publish_guide.md
- 버전 예시 0.7.0 → 0.7.3 (현재 릴리즈 기준)
- 커맨드 예시 갱신 (git tag v0.7.3 등)
- 테스트 수치 783 → 941
- 신규 섹션 "브라우저 확장 버전 정책 (라이브러리와 이원화)" — v0.2.x 정책 명문화

[B] chrome_edge_extension_build_deploy.md → 통합 확장 매뉴얼로 확장
- 제목: "브라우저 확장 빌드 및 배포 매뉴얼 (Chrome/Edge/Firefox/Safari)"
- 빌드 크기 실측치 갱신 (WASM 3.9MB · 전체 23MB)
- 테스트 페이지에 06-security.html 추가
- 4.4 절 Firefox (AMO 제출 절차) + 4.5 절 Safari (macOS 전용 빌드) 신규

[C] browser_extension_dev_guide.md
- 제목: Safari/Chrome/Edge → Safari/Chrome/Edge/Firefox
- Service Worker vs Background Scripts 표에 Firefox 열 추가
- 9절 신규 "chrome.* vs browser.* 네임스페이스 차이"
- 10절 신규 "rhwp-shared/ 공통 모듈 + 심볼릭 링크 + dereference 빌드 패턴" (PR #214)
- 11절 신규 "Chrome onDeterminingFilename vs Firefox onCreated+onChanged"

[D] hyper_waterfall.md
- 783+ 테스트 → 941+ 테스트
- "1인 개발" → "1인 메인테이너 + Claude Code AI + 외부 기여자 9명 (v0.2.1 기준)"
- "v0.6.0 릴리즈" → "v0.5.0 공개 릴리즈 (뼈대 완성 지점)"

[E] e2e_verification_guide.md
- 신규 섹션 "SVG 회귀 검증 (Rust 유닛 테스트 기반)" — PR #181 하네스
- UPDATE_GOLDEN=1 사용법, 결정성 재확인 절차
- 경고: 렌더 영향 PR 머지 후 golden 재생성 필수 (PR #221 / #251 2회 재현)
- 신규 섹션 "향후 작업 — 한컴 PDF 기준 Visual Diff 하네스" — 이슈 #253

[F] onboarding_guide.md
- E2E 모드 설명 환경 일반화 (Windows Chrome → 로컬/컨테이너 헤드리스 · 호스트 Chrome/Chromium)

[G.2] 신규 mydocs/manual/pr_review_workflow.md
- PR 리뷰 · 통합 워크플로우 표준화
- 리뷰 문서 2종 (review + impl) 작성 절차
- 로컬 사전 검증 (빌드/테스트/Clippy/doctest/svg_snapshot)
- Admin merge 후 필수 후속 (이슈 close · 감사 코멘트 · devel sync · golden 재생성 · archives 이동)
- 재작업 요청 패턴 (PR #234#251 사례)
- 예외 케이스 (dependabot · 오래된 base · 대형 PR)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request Apr 23, 2026
…ot 반영)

피드백 mydocs/feedback/manual_currency_audit.md 결정 반영. 최근 사이클의 주요 변경을
매뉴얼에 동기화하고, PR 처리 절차 매뉴얼을 신설.

[A] publish_guide.md
- 버전 예시 0.7.0 → 0.7.3 (현재 릴리즈 기준)
- 커맨드 예시 갱신 (git tag v0.7.3 등)
- 테스트 수치 783 → 941
- 신규 섹션 "브라우저 확장 버전 정책 (라이브러리와 이원화)" — v0.2.x 정책 명문화

[B] chrome_edge_extension_build_deploy.md → 통합 확장 매뉴얼로 확장
- 제목: "브라우저 확장 빌드 및 배포 매뉴얼 (Chrome/Edge/Firefox/Safari)"
- 빌드 크기 실측치 갱신 (WASM 3.9MB · 전체 23MB)
- 테스트 페이지에 06-security.html 추가
- 4.4 절 Firefox (AMO 제출 절차) + 4.5 절 Safari (macOS 전용 빌드) 신규

[C] browser_extension_dev_guide.md
- 제목: Safari/Chrome/Edge → Safari/Chrome/Edge/Firefox
- Service Worker vs Background Scripts 표에 Firefox 열 추가
- 9절 신규 "chrome.* vs browser.* 네임스페이스 차이"
- 10절 신규 "rhwp-shared/ 공통 모듈 + 심볼릭 링크 + dereference 빌드 패턴" (PR #214)
- 11절 신규 "Chrome onDeterminingFilename vs Firefox onCreated+onChanged"

[D] hyper_waterfall.md
- 783+ 테스트 → 941+ 테스트
- "1인 개발" → "1인 메인테이너 + Claude Code AI + 외부 기여자 9명 (v0.2.1 기준)"
- "v0.6.0 릴리즈" → "v0.5.0 공개 릴리즈 (뼈대 완성 지점)"

[E] e2e_verification_guide.md
- 신규 섹션 "SVG 회귀 검증 (Rust 유닛 테스트 기반)" — PR #181 하네스
- UPDATE_GOLDEN=1 사용법, 결정성 재확인 절차
- 경고: 렌더 영향 PR 머지 후 golden 재생성 필수 (PR #221 / #251 2회 재현)
- 신규 섹션 "향후 작업 — 한컴 PDF 기준 Visual Diff 하네스" — 이슈 #253

[F] onboarding_guide.md
- E2E 모드 설명 환경 일반화 (Windows Chrome → 로컬/컨테이너 헤드리스 · 호스트 Chrome/Chromium)

[G.2] 신규 mydocs/manual/pr_review_workflow.md
- PR 리뷰 · 통합 워크플로우 표준화
- 리뷰 문서 2종 (review + impl) 작성 절차
- 로컬 사전 검증 (빌드/테스트/Clippy/doctest/svg_snapshot)
- Admin merge 후 필수 후속 (이슈 close · 감사 코멘트 · devel sync · golden 재생성 · archives 이동)
- 재작업 요청 패턴 (PR #234#251 사례)
- 예외 케이스 (dependabot · 오래된 base · 대형 PR)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@postmelee postmelee deleted the fix/issue-207-download-interceptor-common branch May 2, 2026 07:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants