Match willReadFrequently IDL to the HTML Standard

IN REVIEW2026blinkcanvasweb-standards
2026. 7. 30.injunchoi98 프로필 이미지injunchoi98

Canvas 2D의 willReadFrequently 옵션을 HTML 표준의 boolean 정의와 맞추고,
옵션 생략과 명시적인 false를 구분하도록 수정했습니다.

문제 설명

HTML 표준은 willReadFrequently를 boolean으로 정의하지만 Blink는 자체 enum을
사용하고 있었습니다. 이 차이로 Web IDL의 boolean 변환 규칙과 Blink 내부 표현이
일치하지 않았습니다.

또한 옵션을 생략한 경우와 false를 명시한 경우가 같은 값으로 전달되면, 구현이
호출자의 의도를 구분할 수 없습니다.

해결 내용

CanvasContextCreationAttributesModulewillReadFrequently를 boolean으로
변경했습니다. 변환 코드에서는 hasWillReadFrequently()로 멤버가 실제로
전달됐는지 확인한 뒤 다음 세 상태를 유지합니다.

  • 옵션 생략: 선호 없음
  • false: 빈번한 읽기를 선호하지 않음
  • true: 빈번한 읽기를 선호함

기존 C++ 테스트도 새 IDL 표현에 맞게 수정했습니다.

테스트 방법

HTMLCanvasElement와 OffscreenCanvas 양쪽에 WPT를 추가했습니다. undefined,
false, 0, 빈 문자열, null, true, 문자열과 객체 입력을 사용해 Web IDL의
boolean 변환 결과와 getContextAttributes().willReadFrequently 반환값을
확인합니다.

이 CL은 현재 리뷰 중입니다.

배운 점

  • Web IDL 타입은 JavaScript 입력 변환 방식까지 결정하므로 내부 타입과 별개로
    표준 정의를 정확히 따라야 합니다.
  • boolean 값만 확인하면 옵션 생략과 명시적인 false를 구분할 수 없습니다.
    optional dictionary member는 has*() 검사까지 함께 사용해야 합니다.

참고 자료