OSSCA Chromium

기여 목록 / 8512139

Introduce DEFAULT_VIEW in ClassesPaneWidget

DevToolsrefactordevtools/devtools-frontendIn Review

panels/elements/ClassesPaneWidget.ts 를 view 함수 구조로 옮기는 연작의 첫 CL 입니다. 방향 확인을 위해 범위를 최소화했습니다.

문제 설명

  • 생성자에서 createChild 로 DOM 을 만들고 갱신 때 removeChildren() 과 appendChild() 로 교체하는 명령형 구조
  • docs/ui_engineering.md 는 렌더링을 DEFAULT_VIEW 로 분리하고 view 를 주입하는 구조를 규정
  • 같은 디렉터리의 동종 위젯 ElementStatePaneWidget 은 이미 전환된 상태

해결 내용

패널 셸(제목 컨테이너와 체크박스 컨테이너)만 DEFAULT_VIEW 로 옮겼습니다.

  • constructor(view: View = DEFAULT_VIEW) 로 view 주입
  • 체크박스 목록은 아직 명령형으로 둠
    • 기존 테스트가 이벤트 직후 동기적으로 CheckboxLabel.create 호출 수를 확인함
    • requestUpdate() 는 큐에 넣는 비동기라 바로 바꾸면 깨짐. 다음 CL 에서 테스트와 함께 옮길 예정
  • 프롬프트는 생성자에서 한 번만 붙이고 proxy 를 view 에 넘김
    • TextPrompt.attach() 는 두 번 호출하면 예외를 던지므로 Lit 이 만든 요소에 붙이는 방식은 안전하지 않음

테스트 방법

  1. panels/elements:unittests 빌드
  2. ClassesPaneWidget.test.ts 통과
  3. 동작 변경 없음 (렌더 후 DOM 구조와 CSS 선택자 동일)

배운 점

  • Bug: 번호는 마이그레이션 영역마다 다름
    • 처음에 panels/accessibility 의 번호(414630400)를 썼다가 panels/elements 의 407751692 로 수정
  • 비슷한 마이그레이션이라도 디렉터리마다 관례가 다름
    • DEFAULT_VIEW 상수 대신 defaultView 함수를 쓰는 곳도 있어, 선례를 고를 때 같은 디렉터리를 먼저 봐야 함

참고 자료

  • third_party/devtools-frontend/src/front_end/panels/elements/ClassesPaneWidget.ts
  • third_party/devtools-frontend/src/docs/ui_engineering.md