기여 목록 / 8313729
8313729: a11y: Update form role after name changes
BlinkfixMerged
role="form" 또는 <form> 요소의 접근성 이름(accessible name)이 런타임에 동적으로 변경될 때 캐시된 역할(cached role)을 업데이트
문제 설명
접근성 트리가 노드를 표현할 때, 이름 변경에 따른 역할 지연 업데이트(deferred role update) 대상에 role="form"과 <form> 요소가 누락되어 있었습니다.
- ARIA 라벨(
aria-label,aria-labelledby)이 동적으로 추가되거나 제거될 때 해당 요소의 캐시된 역할(cached role)이 즉시 갱신되지 않는 문제 발생 role="form"요소를 처음 접근성 캐시에 로드할 때 이름이 없으면generic역할로 지정되었다가, 런타임에aria-label이 추가되더라도form역할로 업데이트되지 않음- 동적 DOM 변경 후 스크린 리더 등 보조 기술에 잘못된 역할 정보가 전달되는 문제
해결 내용
accessible name 변경으로 인한 지연 역할 업데이트(deferred tree update) 조건 및 관련 핸들러 구조를 전체적으로 보완하였습니다.
- 이름 의존적 역할(Name-dependent role) 재계산 조건 추가:
- 기존에는
<section>및role="region"변경만 감지하던 로직에role="form"조건을 포함시켰습니다. - 코드 중복 방지 및 모듈 간 동기화를 위해 기존
AXObject::IsNameDependentAriaRole()헬퍼 메서드를 활용하도록 리팩터링하였습니다.
- 기존에는
- 리뷰 피드백을 반영한 리팩터링 및 명칭 정돈:
- 특정 역할(
section,region)에 국한되었던 함수명(SectionOrRegionRole...)을 스펙 용어에 맞게NameDependentRolesMaybeChangedWithCleanLayout으로 변경하였습니다. - 연관된
TreeUpdateReason열거형(enumerator) 명칭도kNameDependentRolesMaybeChangedFrom*로 일괄 변경하였습니다. - 주석을 HTML-AAM 스펙 명세 출처(w3c/html-aam) 명시와 함께 깔끔하게 정돈하였습니다.
- 특정 역할(
테스트 방법
리뷰에 따라 단위 테스트, 통합 테스트 추가
- 단위 테스트:
AXObjectCache에role=form에 동적으로 추가하는 테스트 - 통합 테스트:
aria-label을 동적으로 설정 시 올바른 AXForm 역할로 업데이트되는지 확인
배운 점
- Blink 랜더러의 접근성 구조에서 accessible name 변경 이벤트와 캐시된 Role 갱신 간의 연동 흐름 학습
- 리뷰어 피드백을 통해 모듈 전체의 일관성을 맞추는 네이밍 정돈(TreeUpdateReason)과 헬퍼 메서드 재활용의 중요성을 학습