Don't register WebM / MSE-AVF media players for GPU-process playback under MediaContainment
WebKit은 미디어 처리를 세 계층으로 분리합니다. WebContent process(JS, demuxing), GPU process(decoding, rendering), WebContent 측 remote proxy(MediaPlayerPrivateRemote)가 각각의 역할을 맡습니다. MediaContainment가 활성화된 상태에서는 WebM과 MSE-AVF 엔진이 WebContent에서 demux를 수행하고, renderer만 GPU process에서 실행됩니다. 이런 구조에서 GPU에 MediaPlayerPrivate 전체를 인스턴스화하는 것은 불필요한 데다, defense-in-depth 관점에서도 취약점으로 남게 됩니다. 이전에는 createMediaPlayer 내부의 단일 MESSAGE_CHECK가 이러한 인스턴스화를 명시적으로 차단하는 IPC guard 역할을 했습니다. 다만 codec 지원 여부를 조회하는 canDecodeExtendedType은 같은 engine registry를 공유하고 있었습니다. "쿼리에 응답 가능한 엔진"과 "재생을 위해 인스턴스화 가능한 엔진"을 구분할 방법이 없었던 것입니다.
Source/WebCore/platform/graphics/MediaPlayerEnums.h
Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp
이 commit은 수동으로 관리되던 allowlist를 registry 기반의 scope 필터링으로 대체했습니다. 각 MediaPlayerPrivate는 이제 자체적으로 MediaPlayerScope(Playback 또는 Supports)를 선언합니다. 새로 추가된 playbackEngineForConnection 헬퍼는 scope와 MediaContainmentEnabled 상태를 함께 고려해 GPU process의 engine 조회를 필터링합니다. 결과적으로 MediaContainment가 활성화된 상태에서는 WebM과 MSE-AVF 엔진이 GPU 재생용으로 인스턴스화되지 않으면서도, codec 쿼리에는 계속 응답할 수 있습니다.
Significance
이 변경은 GPU process의 권한 경계 자체를 재구성합니다. 명시적 MESSAGE_CHECK IPC guard는 제거되었고, 모든 호출 지점에서 올바르게 준수되어야 하는 암묵적 registry 계약으로 대체되었습니다. 이로 인해 공격 표면은 더 넓고 파악하기 까다로운 형태로 바뀌었습니다.