기여 목록 / 8409529
[Blink] Use DOMNodeIdType in InspectorResourceContainer
Blink Inspector의 스타일 내용 캐시에서 DOM 노드 ID를 타입 안전한
DOMNodeIdType으로 전환했습니다. 선행 CL 8397547에서 추가한 WTF 해시 특성을
실제 사용처에 적용한 후속 작업으로, 캐시의 키와 저장·조회·삭제 API를 함께
변경했습니다.
문제 설명
기존 Blink 내부의 DOMNodeId는 int의 타입 별칭입니다. 따라서 DOM 노드 ID와
다른 용도의 정수를 컴파일러가 서로 다른 타입으로 구분할 수 없습니다.
InspectorResourceContainer도 스타일 요소의 내용을 보관하는
style_element_contents_의 키와 관련 함수의 인자로 이 타입을 사용했습니다.
이를 base::IdType32 기반의 DOMNodeIdType으로 전환해 캐시 API가 받는 ID의
의미를 타입으로 표현하고자 했습니다.
다만 Node::GetDomNodeId()는 아직 정수 ID를 반환하므로, Inspector의 사용처와
기존 Node API가 만나는 지점에서는 명시적인 타입 변환이 필요했습니다.
해결 내용
1. 캐시 키와 API 인자를 함께 전환
inspector_resource_container.h에서 캐시의 키를 DOMNodeIdType으로 바꾸고,
저장·조회·삭제 함수의 선언과 .cc의 정의도 같은 타입으로 맞췄습니다.
아래는 헤더에서 변경한 선언을 발췌한 코드입니다.
void StoreStyleElementContent(DOMNodeIdType backend_node_id,
const String& content);
bool LoadStyleElementContent(DOMNodeIdType backend_node_id, String* content);
void EraseStyleElementContent(DOMNodeIdType backend_node_id);
// InspectorResourceContainer의 private 멤버
HashMap<DOMNodeIdType, String> style_element_contents_;타입 정의를 위한 public/common/dom/dom_node_id.h와 해시 컨테이너 지원을 위한
renderer/platform/graphics/dom_node_id_traits.h를 포함했습니다. 해시 특성을
새로 구현하지 않고 선행 CL에서 추가한 특수화를 재사용했습니다.
2. Inspector 호출부에서 정수 ID를 명시적으로 변환
inspector_style_sheet.cc에서는 스타일 요소 또는 Inspector가 만든 스타일시트의
소유 문서 ID를 캐시에 전달하는 저장·조회 호출 네 곳을 변경했습니다.
다음은 스타일 요소의 내용을 저장하는 호출부입니다.
resource_container_->StoreStyleElementContent(
DOMNodeIdType(element->GetDomNodeId()), text);inspector_css_agent.cc에서도 스타일 요소가 변경될 때 캐시를 지우는 호출을
같은 방식으로 맞췄습니다.
void InspectorCSSAgent::WillChangeStyleElement(Element* element) {
resource_container_->EraseStyleElementContent(
DOMNodeIdType(element->GetDomNodeId()));
}Node::GetDomNodeId() 자체는 변경하지 않았습니다. 캐시 내부와 API는 새 타입을
사용하고, 아직 정수 ID를 반환하는 기존 API와의 경계에서만 변환하도록 범위를
제한했습니다.
3. 캐시 동작을 유지하면서 네 파일만 변경
| 파일 | 변경 내용 |
|---|---|
inspector_resource_container.h |
캐시 키·함수 인자 타입 및 헤더 의존성 변경 |
inspector_resource_container.cc |
저장·조회·삭제 함수 정의의 인자 타입 변경 |
inspector_style_sheet.cc |
저장·조회 호출부에서 DOMNodeIdType 생성 |
inspector_css_agent.cc |
캐시 삭제 호출부에서 DOMNodeIdType 생성 |
네 파일은 모두 third_party/blink/renderer/core/inspector/에 있습니다.
캐시의 Set, Contains, at, erase 처리와 프레임 로드 시 캐시를 비우는 동작은
유지했습니다. URL을 키로 사용하는 별도의 style_sheet_contents_도 변경하지
않았습니다.
최종 커밋은 343a5c5a1bd4cd5135bfe9f00bdf9579e64a7aee이며,
커밋 위치는 refs/heads/main@{#1701591}입니다.
테스트 방법
이 CL에는 테스트 파일의 추가나 수정이 없습니다. Gerrit에 남은 CQ 기록을 기준으로 다음 검증 결과를 확인할 수 있습니다.
- CQ dry run 통과: 2026년 9월 17일 Patch Set 1에서 dry run이 실행되었고, CQ 봇이 통과 결과를 남겼습니다.
- 리뷰 및 CQ 제출: Philip Pfaffe와 Alex Rudenko의 리뷰를 거쳐 9월 21일 CQ가 실행되었으며, 같은 날 리베이스 후 최종 커밋으로 병합되었습니다.
로컬 테스트 실행 명령이나 개별 테스트 수, 성능 측정 결과는 CL 설명과 댓글에서 확인되지 않아 별도의 수행 결과로 기재하지 않았습니다.
배운 점
- 타입 별칭과 타입 안전성은 다릅니다.
DOMNodeId라는 이름만으로는 정수의 혼용을 막지 못하므로, 독립적인 ID 타입을 API와 컨테이너에 함께 적용해야 합니다. - 점진적 전환에서는 경계를 명확히 해야 합니다. 공통 Node API를 한꺼번에 바꾸기보다 Inspector의 작은 사용처부터 전환하고, 기존 타입과 만나는 호출부에서 명시적으로 변환할 수 있습니다.
- 기반 작업과 적용 작업을 나누면 변경 범위가 작아집니다. 선행 CL의 해시 특성을 재사용해 이번 CL을 캐시와 호출부의 타입 변경에 집중할 수 있었습니다.
- 키 타입 변경은 캐시의 전체 사용 경로를 확인해야 합니다. 저장·조회뿐 아니라 스타일 변경 시 삭제하는 경로까지 같은 타입을 사용하도록 맞췄습니다.
연관 기여
기존 DOMNodeId int 형을 컴파일러에서 구별 가능하도록 DOMNodeIdType 으로의 변경 Clean up