24 KiB
Video Downloader — 브라우저 기능 강화 계획서 (v2)
목표: 이 앱에 내장된 WebView2 브라우저에 일반적인 데스크톱 브라우저의 핵심 사용자 기능을 심어, 단순 "영상 재생 → 감지" 용도를 넘어 일상적으로 쓸 수 있는 브라우저로 만든다.
작성일: 2026-08-15 (v2 — 2차 심층 조사 반영) · 대상:
Paca.App(WPF + WebView2 1.0.4078.44)조사 방법론:
- 1차(2026-08-13): Chrome/Firefox/Zen 3개 브라우저 단일 조사 → v1 초안
- 2차(2026-08-15): 5개 전문 조사팀 병렬 심층 조사 — ① Chrome+Edge ② Firefox+Vivaldi ③ Zen+Arc ④ Brave+Opera+Safari+기타(Floorp/Orion/Sidekick/Comet) ⑤ WebView2 API 검증팀(Microsoft Learn 팩트체크). 총 80여 회 웹 검색 + 공식 문서 직접 열람.
확장 계획: 모바일 앱 + PC↔모바일 연동은
MOBILE_PLAN.md로 분리 (2026-08-15, 4개 조사팀 심층 조사 기반 — MAUI 10 컴패니언 앱, LAN QR 페어링, Core 엔진 재사용 검증 포함). 멀티플랫폼 배포(Win/macOS/Linux/모바일)는DEPLOYMENT_PLAN.md로 분리.
⚠️ v1 → v2 주요 수정 사항 (2차 조사로 판명)
- 페이지 내 검색은 네이티브 API로 가능 — v1은 "JS 주입으로 직접 구현"이라 판단했으나 WebView2 1.0.3405.78부터
CoreWebView2.Find가 네이티브 제공된다 (우리 버전 1.0.4078.44에 포함).StartAsync(options)+FindNext()/FindPrevious()+MatchCount/ActiveMatchIndex이벤트.SuppressDefaultFindDialog=true로 자체 UI 구축. → 공수 대폭 감소, 탭 이전에도 독립 구현 가능 - 백그라운드 탭 절전도 네이티브 —
CoreWebView2.TrySuspendAsync()/Resume()(WebView가 숨겨진 상태여야 함). Edge Sleeping Tabs와 1:1 대응. - 탭 오디오 표시/음소거 네이티브 —
IsDocumentPlayingAudio/IsMuted+ 변경 이벤트. - 다중 프로필이 하나의 환경에서 가능 —
CreateCoreWebView2ControllerOptions(ProfileName)→ 브라우저 프로세스 추가 없이 Firefox 컨테이너 탭 유사 격리.CustomDataPartitionId로 탭 단위 쿠키 격리도 가능. - Arc 브라우저는 2025-05 개발 중단 (유지보수 모드) — 디자인 참고용으로만 차용.
- Edge Collections/Drop/사이드바는 2026년 폐지 예정 — 클론하지 않음. 살아남는 Edge 자산은 세로 탭·절전 탭·분할 화면·웹 캡처·몰입형 리더.
- WPF airspace 주의 — 표준
WebView2(HwndHost) 위에는 WPF 요소를 올릴 수 없음.WebView2CompositionControl은 DRM 영상 재생 불가(영상 앱엔 치명적) → 표준 컨트롤 유지, 크롬 UI는 WebView2 주변에 배치하는 설계 원칙 확정.
0. 현재 상태 (AS-IS)
MainWindow.xaml(.cs) 단일 WebView2 인스턴스 기반:
| 영역 | 구현 여부 | 비고 |
|---|---|---|
| 주소창 + 이동 + 자동완성/제안 | ✅ | 히스토리 기반, 인라인 자동완성(Tab/→) |
| 뒤로/앞으로/새로고침/홈 | ✅ | 상태 동기화 |
| 북마크 / 히스토리 | ✅ | 플라이아웃, JSON 영속(500 캡) |
| InPrivate 모드 | ✅ | 재시작 적용 |
| 단축키 | ✅(일부) | Ctrl+L, F5/Ctrl+R, Esc, Alt+←/→, Ctrl+±/0 |
| 줌 | ✅ | 세션 한시적(사이트별 영속 아님) |
| 팝업 → 현재 WebView 라우팅 | ✅ | NewWindowRequested |
| 페이지 다운로드 → 저장 폴더 | ✅ | DownloadStarting |
| 영구 프로필 / 데이터 삭제 | ✅ | %AppData%/Paca/webview |
| 다크/라이트 테마, 보더리스 | ✅ | DWM 연동 |
| 우측 다운로드 패널(접기/폭) | ✅ | |
| DevTools, 미디어 자동 감지 | ✅ | HLS/DASH/직링크/소셜(yt-dlp) |
결여: 탭 · 페이지 내 검색 · 다운로드 매니저 UI · 검색엔진 · 북마크바 · 명령 팔레트 · 리더 모드 · 스크린샷 · 전체화면 · 사이트별 설정
1. WebView2 API 역량 매트릭스 (2차 조사 검증 완료)
우리 버전(1.0.4078.44) 기준. 구현 계획의 기술적 토대.
| 필요 기능 | 네이티브 API | 비고 |
|---|---|---|
| 페이지 내 검색 | CoreWebView2.Find → StartAsync(CoreWebView2FindOptions) / FindNext() / FindPrevious() / Stop(), MatchCountChanged·ActiveMatchIndexChanged 이벤트 |
대소문자·단어일치·전체 강조 옵션 내장. SuppressDefaultFindDialog=true 필수(자체 UI) |
| 다중 탭 | 공유 CoreWebView2Environment + N개 WebView2 컨트롤 |
인스턴스당 메모리 부담 → 절전과 짝꿍. 브라우저 프로세스 1개 공유 |
| 탭 절전 | TrySuspendAsync() / Resume() / IsSuspended / MemoryUsageTargetLevel |
숨겨진(비활성) 탭에서만 동작. 자동으로 Low 모드 진입 |
| 오디오 | IsMuted(읽기/쓰기) · IsDocumentPlayingAudio · 변경 이벤트 |
음량 조절은 불가(뮤트만). 초기화 전 뮤트 설정은 안 먹는 버그(#2120) |
| 컨테이너/프로필 | CreateCoreWebView2ControllerOptions(ProfileName, IsInPrivateModeEnabled), CoreWebView2Profile, CustomDataPartitionId |
한 환경에서 여러 프로필 = 프로세스 추가 없이 쿠키/세션 격리 |
| 다운로드 관리 | DownloadStarting + CoreWebView2DownloadOperation: Pause()/Resume()/Cancel(), BytesReceived/TotalBytesToReceive/State/InterruptReason, 이벤트 3종 |
속도는 BytesReceived 델타로 자체 계산 |
| 팝업→새 탭 | NewWindowRequested: e.NewWindow = 새탭.CoreWebView2, GetDeferral() |
탭 생성이 비동기라 deferral 필수 |
| 줌 | Controller.ZoomFactor + ZoomFactorChanged |
컨트롤러(탭) 단위. 사이트별 영속은 WebView2이 보장 안 함 → 앱 설정에 도메인→배율 저장 후 NavigationCompleted 때 재적용 |
| 파비콘/제목 | DocumentTitle(Changed), FaviconUri(Changed), GetFaviconAsync(Png) |
탭 UI 재료 |
| 컨텍스트 메뉴 | ContextMenuRequested + CreateContextMenuItem |
기본 메뉴 항목 재구성 + 커스텀 항목(「이 링크의 영상 받기」 등) |
| 권한 | PermissionRequested + Profile.SetPermissionStateAsync(kind, origin, state) |
알림/카메라/마이크/자동재생 등 사이트별 영속 |
| 쿠키 | CookieManager(Profile 스코프) |
|
| 인쇄/PDF | ShowPrintUI(), PrintAsync(settings), PrintToPdfAsync(path) |
|
| C#↔JS 브리지 | PostWebMessageAsJson ↔ WebMessageReceived, AddScriptToExecuteOnDocumentCreatedAsync |
리더 모드/부스트/요소 zap의 기반. CSP에 막히지 않음(단 Trusted Types DOM 싱크 주의) |
| 알림 | NotificationReceived (비영속 알림만, 호스트가 직접 표시) |
푸시(서비스워커) 알림은 미지원 |
| 스크린샷 | CapturePreviewAsync(뷰포트만) / CDP Page.captureScreenshot(captureBeyondViewport:true로 전체 페이지) |
전체 페이지 캡처는 CDP 경유 |
| 오류 페이지 | IsBuiltInErrorPageEnabled=false + 실패 시 NavigateToString |
재진입 가드 필요(#634) |
| 상태바 링크 미리보기 | StatusBarText(Changed) |
링크 호버 시 하단 표시 |
자체 구현 필요 (네이티브 없음): 리더 모드(Readability.js 주입) · 검색엔진 로직(순수 호스트) · 히스토리/북마크 저장(이미 보유) · 명령 팔레트 · 탭 그룹/워크스페이스(UI 개념)
2. 조사 결과 종합 — 9개 브라우저의 차별 기능
Chrome (표준의 척도)
탭 그룹(색+이름+접기, 저장된 그룹), Memory Saver(유휴 탭 동결), 탭 검색 Ctrl+Shift+A, @tabs/@bookmarks/@history 주소창 스코프 검색, 키워드 사이트 검색(wiki+Tab), Ctrl+Shift+T 복원, 다운로드 버블(진행 링), 사이트별 줌 영속, 빠른 닫힘. 2025+ : 세로 탭 추가, AI 탭 정리.
Edge (WebView2의 친척 — 가장 직접 참고)
세로 탭(좌측 사이드바, 아이콘 레일 축소+호버 확장), Sleeping Tabs(30초~12h 설정, "zzz" 표시, 절약량 표시), 네이티브 분할 화면, 웹 캡처(영역/전체 페이지+주석, Ctrl+Shift+S), 몰입형 리더(읽어주기 Ctrl+Shift+U, 문법 도구), 즐겨찾기바 "아이콘만" 모드, F4=주소창. (Collections/Drop/사이드바는 2026 폐지 — 미차용)
Firefox
Reader View(F9) — 폰트/간격/테마(밝/어/세피아/대비) + 낭독(TTS); Multi-Account Containers(쿠키 격리 다중 로그인); Enhanced Tracking Protection(실드 아이콘, 3단계); HTTPS-Only; 빠른 찾기 /(즉시), '(링크만); PiP(자동 열림 옵션); 다운로드 패널(.part 재개).
Vivaldi (커스터마이징의 왕)
Quick Commands(F2) — 전 브라우저 액션 명령 팔레트; Tab Stacks(드래그 스택, Compact/2단/아코디언 표시); Tab Tiling(수직/수평/그리드, Ctrl+F9/F8/F7); Workspaces + 규칙(URL 패턴→워크스페이스 자동 라우팅!); 북마크 닉네임(g 검색어); Speed Dial(새 탭 썸네일 그리드); Web Panels(사이드바 고정 사이트); Notes(마크다운, "Add to Note"); Page Actions(CSS 필터: 흑백/반전/세피아/가리개); Capture(전체/영역); 주소창 진행 바, 파라미터 제거 복사, 마우스 제스처, 툴바 편집.
Zen Browser (Firefox 포크, 활발)
세로 탭 철학 + Essentials(전 워크스페이스 상시 아이콘 고정); Workspaces(탭 세트 분리); Split View(최대 4분할); Glance(Alt+클릭 링크 미리보기 플로팅, 닫기/탭으로/분할 버튼); Compact Mode(사이드바 숨김+엣지 호버 복원); Boosts(사이트별: 색 틴트/폰트/요소 zap/강제 다크); 핀 탭 닫으면 언로드(삭제 아님); Mods(CSS+JS 마켓).
Arc (개발 중단 — 개념만 차용)
Command Bar(Ctrl+T 스포트라이트) — 탭/북마크/히스토리/명령/웹검색 통합; Spaces(테마별 공간); Auto Archive(미고정 탭 12h 후 아카이브, 닫기=아카이브, 검색 가능한 복구 목록); Boosts(슬라이더: 색/대비/밝기/채도/세피아/다크/줌 + CSS); Peek(Shift+클릭 미리보기); Air Traffic Control(도메인→Space 자동 라우팅); URL 바 탭별 입력 초안 기억.
Brave
Playlist ★영상 앱에 최적 — 주소창 "미디어 추가" 버튼으로 페이지 영상/오디오를 재생목록에 저장, 백그라운드 재생, 광고 없는 재생, 오프라인 저장; Shields(사이트별 차단 슬라이더 + 차단 카운터); Speedreader(자동 리더).
Opera
Tab Islands(같은 부모에서 연 탭 자동 그룹); Video Popout(호버 버튼→분리 플레이어); 사이드바 메신저; 무료 VPN; Speed Dial; Workspaces.
Safari / 기타
Safari: Tab Groups + Reading List(오프라인 나중읽기), 컴팩트 탭바. Floorp: 멀티로우 탭. Orion: Lazy Load(포커스 시 로드). (Sidekick 2025 종료, Comet/Dia = AI 브라우저 흐름 참고)
3. 도입 기능 목록 (v2 — 재서열)
🏆 Tier 1 — 필수 (일반 브라우저의 기본기)
| # | 기능 | 근원 | 구현 경로 | 공수 |
|---|---|---|---|---|
| T1-1 | 탭 시스템 (생성/닫기/전환/Ctrl+Tab·1~9/드래그 정렬/복제) | 전 브라우저 | 공유 Environment + 탭당 WebView2 + NewWindowRequested→새 탭(deferral) |
L |
| T1-2 | 닫은 탭 복원 Ctrl+Shift+T | 전 브라우저 | 닫힘 스택(인덱스+URL 보존) | S |
| T1-3 | 페이지 내 검색 Ctrl+F (일치 수 X/Y, 다음/이전, 대소문자) | 전 브라우저 | 네이티브 CoreWebView2.Find + 자체 하단 바 |
S ↓↓ |
| T1-4 | 검색엔진 (기본 엔진 선택 + 키워드 전환 g , yt + @북마크/@기록 로컬 스코프) |
Chrome/Vivaldi/Firefox | 순수 호스트 로직 + 제안 드롭다운 확장 | S~M |
| T1-5 | 다운로드 매니저 UI (진행+속도, 일시정지/재개/취소, 폴더 열기, Ctrl+J) | Chrome 버블/Vivaldi 패널 | CoreWebView2DownloadOperation 풀 API + 앱 카드와 통합 뷰 |
M |
| T1-6 | 북마크바 (주소창 아래, Ctrl+Shift+B, 아이콘만 모드) | Chrome/Edge | UI 행 | S |
| T1-7 | 사이트별 줌 영속 | 전 브라우저 | 도메인→배율 사전 저장 + NavigationCompleted 재적용 |
S |
| T1-8 | 탭 오디오 표시 + 클릭 음소거 | Chrome/Edge | IsDocumentPlayingAudio/IsMuted 네이티브 |
S |
| T1-9 | 강제 새로고침 Ctrl+Shift+R | 전 브라우저 | Profile.ClearBrowsingDataAsync(DiskCache) 후 Reload |
S |
| T1-10 | 세션 복원 (시작 시 이전 탭 복구, 옵션) | Chrome/Firefox | 탭 URL 리스트 영속 | S |
| T1-11 | 전체화면 F11 + 비디오 전체화면 지원 | 전 브라우저 | ContainsFullScreenElement 이벤트 + 크롬 자동 숨김 |
S |
🥈 Tier 2 — 강력 추천 (차별화 + 사용성 대폭 향상)
| # | 기능 | 근원 | 구현 경로 | 공수 |
|---|---|---|---|---|
| T2-1 | 명령 팔레트 (Ctrl+K: 탭/북마크/기록/액션/웹검색 통합) | Arc Command Bar / Vivaldi Quick Commands | 호스트 UI + 기존 데이터 재사용 | M |
| T2-2 | 탭 절전 (유휴 탭 자동 서스펜드, "zzz" 표시, 예외 사이트) | Edge Sleeping Tabs / Zen | TrySuspendAsync/Resume + 유휴 타이머 |
M |
| T2-3 | 분할 화면 (2~4분할, 드래그 배치, 분할 닫기) | Zen Split / Edge / Vivaldi Tiling | Grid + GridSplitter + WebView2 복수 | M~L |
| T2-4 | 리더 모드 (F9, 본문 추출 + 폰트/테마) | Firefox/Zen | Readability.js 주입 + 스타일 오버레이 | M |
| T2-5 | 세로 탭 레이아웃 (좌측 사이드바, 축소 레일, 토글) | Edge/Zen | 탭 스트립 위치 전환 | M |
| T2-6 | Glance 링크 미리보기 (Alt+클릭 → 플로팅 미리보기, 탭으로 승격 버튼) | Zen Glance / Arc Peek | 오버레이 WebView2 창 | M |
| T2-7 | 사이트별 Boost (강제 다크 / 색 틴트 / 요소 zap / 줌 기억) | Zen·Arc Boosts | 도메인별 CSS 주입 AddScriptToExecuteOnDocumentCreated |
M |
| T2-8 | 탭 검색 Ctrl+Shift+A (열린+최근 닫힘 탭 검색 점프) | Chrome/Edge | 호스트 UI | S |
| T2-9 | 스크린샷 (보이는 영역 / 전체 페이지, Ctrl+Shift+S) | Firefox/Edge/Vivaldi | CapturePreviewAsync / CDP captureBeyondViewport |
S~M |
| T2-10 | 미디어 재생목록 ★영상 앱 핵심 — 감지된 영상을 재생목록에 쌓고 앱 내 재생/백그라운드 | Brave Playlist | 감지 파이프라인 + 내장 플레이어 컨트롤 | L |
| T2-11 | 탭 그룹 (색+이름, 접기, 도메인별 자동 그룹) | Chrome 탭 그룹 / Opera Islands | 탭 모델 확장 | M |
| T2-12 | 웹 캡처 → 다운로드 큐 연동 (우클릭 "이 링크 영상 받기") | 커스텀 | ContextMenuRequested 커스텀 항목 |
S |
🥉 Tier 3 — 선택 (돋보이는 기능)
| # | 기능 | 근원 | 비고 |
|---|---|---|---|
| T3-1 | 워크스페이스 + 도메인 라우팅 규칙 ("youtube.com → 영상 공간") | Zen/Vivaldi 규칙/Arc ATC | 탭 세트 스왑 |
| T3-2 | Auto-Archive 탭 수명주기 (닫기=아카이브, 캐던스 설정, 복구 패널) | Arc | 히스토리와 통합 |
| T3-3 | 컨테이너/다중 프로필 (탭별 쿠키 격리 다중 로그인) | Firefox/Zen | ProfileName/CustomDataPartitionId |
| T3-4 | 빠른 찾기 / · '(링크만) |
Firefox | Find API 래핑 |
| T3-5 | 컨텍스트 메뉴 전면 커스터마이징 | — | ContextMenuRequested (T2-12 확장) |
| T3-6 | Page Actions (CSS 필터: 흑백/반전=다크/세피아/가리개) | Vivaldi | Boost와 통합 가능 |
| T3-7 | PiP 영상 팝아웃 (호버 버튼 → 항상 위 창) | Firefox/Opera | Document PiP API or 별도 창 |
| T3-8 | Speed Dial 새 탭 페이지 (썸네일 그리드) | Opera/Vivaldi | 내장 HTML |
| T3-9 | 읽어주기(TTS) | Edge/Firefox | 리더 모드와 세트, Windows TTS |
| T3-10 | 인쇄/PDF Ctrl+P / 소스보기 Ctrl+U | 전 브라우저 | PrintToPdfAsync 등 네이티브 |
| T3-11 | 권한 UI (알림/카메라/마이크/자동재생 사이트별) | Chrome/Firefox | PermissionRequested |
| T3-12 | 노트 패널 (마크다운, "Add to Note") | Vivaldi/Arc | 후순위 |
| T3-13 | 컴팩트 모드 (크롬 전체 숨김, 엣지 호버 복원) | Zen/Arc | 전체화면과 통합 |
| T3-14 | 추적 방지 표시 (차단 카운터 실드) | Firefox/Brave | WebResourceRequested 필터 |
| T3-15 | 주소창 진행 바 + 파라미터 제거 복사 | Vivaldi | 소소한 완성도 |
❌ 의도적 미차용: 비밀번호 관리(자동저장 토글만), 실제 확장 프로그램 생태계, 클라우드 동기화, AI 사이드바(방향 불명확), Edge Collections/Drop(폐지), VPN/Tor(범위 외)
4. 구현 로드맵 (의존성 순, v2)
Phase 0 — 즉효 퀵윈 (탭 이전 독립 구현 가능, 반나절~1일)
신규 발견: 네이티브 API 덕에 탭 대공사 없이 먼저 넣을 수 있는 것들.
- T1-3 페이지 내 검색 —
CoreWebView2.Find+ 하단 검색 바(Ctrl+F/F3/Esc). 가성비 1위로 승격 - T1-4 검색엔진 — URL 판별 → 검색 URL 조합, 기본 엔진 설정(Google/Bing/DDG),
g키워드 - T1-7 사이트별 줌 영속
- T1-9 강제 새로고침
- T1-11 전체화면 F11
Phase A — 탭 아키텍처 (대공사, 모든 탭 기능의 전제)
Browser/TabViewModel+TabManager신규 — 공유CoreWebView2Environment, 탭당 WebView2- 탭 스트립 UI(가로 우선, 세로는 T2-5) + 활성 탭만 Visible
- 기존 로직 전면 리팩터: 주소창/네비/감지(
OnResponseReceived전 탭 구독→중계)/북마크/히스토리/DetectSocial → 활성 탭 대상 - 단축키: Ctrl+T/W/Tab/1~9, Ctrl+Shift+T(T1-2 복원 스택)
NewWindowRequested→ 새 탭(deferral 패턴) 교체- T1-8 오디오 표시/뮤트, T1-10 세션 복원
⚠️ 저장소가 git이 아님 → 착수 전→ git 전환 완료. 감지 회귀는 단위/E2E 테스트로 상시 검증.git init필수
Phase B — 탭 보조 + 핵심 완성
- T1-5 다운로드 매니저 — 페이지 다운로드(
DownloadOperation) + 영상 카드 통합 뷰, 속도/일시정지/재개 - T1-6 북마크바 (+아이콘만 모드)
- T2-2 탭 절전 — 유휴 타이머 →
TrySuspendAsync, 재활성Resume - T2-8 탭 검색 Ctrl+Shift+A
- T2-12 우클릭 "이 링크 영상 받기" — 컨텍스트 메뉴 커스텀 (다운로더 앱의 시그니처)
Phase C — 차별화 (Zen/Arc/Vivaldi 영감)
- T2-1 명령 팔레트 Ctrl+K — 탭/북마크/기록/액션(다운로드·줌·테마·InPrivate)/웹검색
- T2-3 분할 화면 — 플레이어 + 다운로드 큐 용도
- T2-4 리더 모드 — Readability.js 번들
- T2-6 Glance Alt+클릭 미리보기
- T2-7 Boost — 강제 다크/틴트/요소 zap(사이트별 광고 제거)
- T2-9 스크린샷, T2-5 세로 탭, T2-11 탭 그룹
Phase D — 시그니처 + 정제
- T2-10 미디어 재생목록 ★ — 감지된 영상 → 재생목록 패널 → 내장 재생/백그라운드 (Brave Playlist 관점, 우리 앱의 정체성)
- T3-1 워크스페이스+도메인 라우팅, T3-2 Auto-Archive, T3-3 컨테이너, T3-7 PiP, T3-8 Speed Dial 등 — T3-1~T3-15 전 항목 구현(
IMPLEMENTATION_AUDIT.md§1 Phase D·E·3차 표)
5. 우선순위 TOP 5 (v2 — 공수 재평가 반영)
| 순위 | 기능 | 이유 |
|---|---|---|
| 1 | Phase 0 전체 (검색·검색엔진·줌·F11) | 탭 없이도 즉시 체감. 특히 페이지 내 검색은 네이티브 API로 반나절. |
| 2 | Phase A 탭 | 브라우저 정체성의 기반. 이후 모든 것의 전제. |
| 3 | 다운로드 매니저 (T1-5) | 다운로더 앱인데 관리 UI 부재가 최대 모순. |
| 4 | 명령 팔레트 (T2-1) | 모든 기능의 통합 입구 — 기능이 많아질수록 가치 증가. |
| 5 | 미디어 재생목록 (T2-10) | Brave Playlist 관점 — "영상 다운로더 브라우저"의 시그니처 기능. |
6. 기술 노트 & 리스크 (2차 검증 반영)
- airspace: 표준
WebView2(HwndHost)는 최상위 렌더 → WPF 오버레이 불가.WebView2CompositionControl은 DRM 영상 실패 → 불가침 원칙: 크롬 UI는 WebView2를 덮지 않고 둘러싼다. (Glance/커맨드 팔레트는 별도 창 or 여백 배치) - 탭 메모리: 인스턴스당 수십 MB. → 절전(T2-2)을 Phase B에 배치, 최대 탭 수 가드(옵션), Zen식 "핀 탭 닫으면 언로드" 채택 고려.
- 줌 영속: WebView2이 사이트별 줌을 보장하지 않음(#2451/#3459) → 앱 설정 사전이 SSOT.
- Find API: 옵션 변경 시 재 Start. HTML/텍스트 문서만.
SuppressDefaultFindDialog=true로 Edge 기본 바 차단. - 뮤트 버그: 첫 네비게이션 전
IsMuted=true는 무시될 수 있음(#2120) → 초기화 후 설정. - ClearBrowsingDataAsync 셧다운: 앱 종료 중 호출 미완료 이슈(#3176) → 종료 경로에서 호출 금지.
- Trusted Types: 일부 사이트에서
innerHTML주입이 막힘 →textContent/createElement사용. - 미디어 감지 다중화:
WebResourceResponseReceived를 탭마다 구독하되TabManager가 출처 태깅 후DownloadManager.OnDetected중계 (카드에 탭 출처 표시).
7. 성공 기준 (완료 정의)
- Ctrl+F 검색 바: 일치 수 표시, 다음/이전, Esc 닫기 동작
- 주소창에 검색어 → 선택한 엔진으로 검색;
g/yt키워드 전환 동작 - 여러 탭 열기/전환/닫기, 각 탭 독립 네비게이션·감지, Ctrl+Shift+T 복원
- 탭에서 오디오 재생 시 스피커 아이콘 + 클릭 뮤트
- 사이트별 줌 재방문 시 유지
- 다운로드 매니저에서 페이지 다운로드 일시정지/재개/취소 + 속도 표시
- 북마크바 표시/숨김(Ctrl+Shift+B) + 원클릭 이동
- 종료 시 탭 저장 → 시작 시 복원(옵션)
dotnet build0 오류/0 경고(기존 알려진 경고 제외), 기존 미디어 감지·다운로드 회귀 없음 — 전체 테스트 GREEN 유지
출처 (2차 조사 핵심 링크)
WebView2 API (Microsoft Learn):
- CoreWebView2.Find / CoreWebView2Find: learn.microsoft.com/en-us/dotnet/api/microsoft.web.webview2.core.corewebview2.find
- 성능(서스펜션): learn.microsoft.com/en-us/microsoft-edge/webview2/concepts/performance
- 멀티 프로필: learn.microsoft.com/en-us/microsoft-edge/webview2/concepts/multi-profile-support
- 다운로드: …/corewebview2downloadoperation · 컨텍스트 메뉴: …/webview2/how-to/context-menus
- WPF 플랫폼(airspace/CompositionControl): …/webview2/platforms/wpf
Chrome/Edge: support.google.com/chrome/answer/157179 (단축키) · …/2391819 (탭 관리) · explore.microsoft.com/en-us/edge/features (vertical tabs·sleeping tabs·split screen·web capture) · support.microsoft.com/…/keyboard-shortcuts-in-microsoft-edge
Firefox/Vivaldi: support.mozilla.org (keyboard shortcuts·reader view·ETP·HTTPS-only·PiP·screenshots) · help.vivaldi.com (tab-stacks·tab-tiling·workspaces·address-field·quick-commands·web-panels·page-actions)
Zen/Arc: docs.zen-browser.app (workspaces·split-view·glance·compact-mode·urlbar·shortcuts) · resources.arc.net (Spaces·Auto-Archive·Boosts·Peek·Air Traffic Control·Command Bar)
Brave/Opera/기타: brave.com/playlist · brave.com/shields · opera.com/features (tab-islands·video-popout·workspaces) · docs.floorp.app · Apple Support (Safari tab groups·reading list)
전체 원문 리포트: 5개 조사팀 상세 보고서는 세션 에이전트 결과로 보존됨.