Task #207: Firefox download-interceptor에 #198 판정 로직 반영 (공통 모듈 추출)#214
Merged
edwardkim merged 6 commits intoApr 20, 2026
Merged
Conversation
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
4 tasks
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
요약
#207 해결. PR #169 으로 merge된 Firefox 확장의
download-interceptor.js가 Chrome에서 #198 로 해결한 두 가지 핵심 로직(NON_REFETCHABLE_PATTERNSDEXT5 차단,HWP_MIME_HINTSMIME 판정,finalUrl·referrer검사)을 반영하지 못한 격차를 메운다.전략: 리스너 구조는 플랫폼별로 유지(Chrome
onDeterminingFilenamevs FirefoxonCreated+onChanged이중 콜백)하되, 순수 판정 함수만rhwp-shared/sw/download-interceptor-common.js로 추출해 양쪽이 공유. 드리프트 방지(한 번 수정 → 양쪽 반영).변경 내역 (4단계 커밋)
rhwp-shared/sw/download-interceptor-common.js신규 —shouldInterceptDownload(item)순수 함수,HWP_EXTENSION_RE,HWP_MIME_HINTS,NON_REFETCHABLE_PATTERNS추출. 각 extensionsw/에 심볼릭 링크.download-interceptor.js를 공통 모듈 의존으로 축약.onDeterminingFilename단일 콜백 + 기본 동작(마지막 저장 위치 기억) 보존(rhwp-chrome 다운로드 인터셉터 부작용: 일반 파일 저장 시 마지막 위치 미기억 (chrome-fd-001) #198).download-interceptor.js의 이중 콜백(onCreated1차 +onChanged2차 재판정)은 유지하고 판정만shouldInterceptDownload로 교체. DEXT5 referrer 차단·MIME 힌트가 자동으로 적용됨.rhwp-shared/sw/download-interceptor-common.test.js로 이전 + Firefox 특화 시나리오(불완전onCreateditem, MIME 단독 감지,onChanged재판정) 3건 추가.build.mjs에cpSync({ dereference: true })추가해 패키징 시 심링크가 실체 파일로 변환되도록 함.아키텍처 차이 (Chrome vs Firefox)
onDeterminingFilename단일 콜백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추가)검증
node --test rhwp-shared/sw/download-interceptor-common.test.js— 기존 Chrome 20+ 케이스 + Firefox 특화 3건 통과cd rhwp-chrome && node build.mjs && file dist/sw/download-interceptor-common.js→ "ASCII text" (심링크 아닌 실체 파일)cd rhwp-firefox && node build.mjs && file dist/sw/download-interceptor-common.js→ 동일.hwp파일 다운로드 → 뷰어 탭 열림.hwp다운로드 →onCreated단계 감지, 뷰어 탭 열림application/x-hwpMIME →onChanged에서 재판정, 뷰어 탭 열림 (/download.do?token=xxxxx` 감지)rhwp-shared/sw/download-interceptor-common.js한 줄 수정 → 양쪽 dist에 반영되는지 빌드로 확인관련