기여 목록 / 8534727
Prevent ::backdrop generation outside the top layer
OverlayProperty 기능이 켜져 있어도 top layer에 없는 요소의 ::backdrop이
생성되지 않도록 Blink의 pseudo-element 생성 조건을 수정했습니다.
문제 설명
top layer에 없는 일반 요소에 overlay: auto와 ::backdrop 스타일을
지정하면 backdrop이 생성될 수 있었습니다. 화면 전체를 덮는 배경색을 지정한
경우에는 일반 요소가 backdrop을 통해 페이지를 가렸습니다.
기존 코드는 OverlayProperty 기능이 꺼져 있을 때만 top-layer 여부를
검사했습니다. 기능이 켜진 경로에서는 이 필수 조건을 확인하지 않았습니다.
해결 내용
Element::CanGeneratePseudoElement()의 kPseudoIdBackdrop 처리에서
IsInTopLayer()를 먼저 확인하도록 했습니다. top layer에 없는 요소는 기능
플래그와 관계없이 backdrop을 생성할 수 없습니다.
top layer에 있는 요소는 기존 기능 플래그별 처리로 이어지도록 했습니다. 생성 조건을 공통 경로에서 수정해 개별 요소나 작성자 스타일에 별도 예외를 추가할 필요가 없도록 했습니다.
테스트 방법
backdrop-outside-top-layer.html WPT reftest를 추가했습니다. 일반 div에
overlay: auto와 화면 전체를 덮는 빨간 backdrop 스타일을 지정한 뒤, 빈
reference 페이지와 비교해 backdrop이 렌더링되지 않는지 검증합니다.
동일한 테스트를 Linux의 overlay-disabled 가상 테스트에도 등록해
OverlayProperty가 꺼진 구성의 동작을 함께 검사하도록 했습니다.
CL은 Gerrit의 CQ 제출을 거쳐 2026-10-09 UTC에 병합되었습니다.
관련 이슈와 외부 PR
추가한 reftest는 WPT PR #63445로 자동 export되었습니다. Chromium CL의 병합과 upstream WPT PR의 병합은 별도이며, 이 PR은 관련 링크로만 연결합니다.
배운 점
- 기능 플래그 분기보다 앞에서 모든 구성에 필요한 생성 조건을 확인하면 기능을 켰을 때만 나타나는 예외를 줄일 수 있습니다.
- 생성되지 않아야 하는 pseudo-element는 실제 렌더링 결과를 비교하는 reftest로 검증할 수 있습니다.