사용자가 click 과 같은 동작들을 했을 때, 어느 요소가 동작의 대상인지 판별하는 기능입니다.
아래는 크로미움을 기준으로, 클릭이 일어난 후에 실행되는 순서대로 작성되었습니다.
1: RenderWidgetHostImpl::ForwardMouseEvent 를 통해 마운스 이벤트를 받습니다.
2: EventHandler::HandleMouseEvent에서 여러 마우스 이벤트를 다음 과정으로 라우트합니다.
3: LayoutView::HitTest에서 Hit Test 를 시작합니다
4: PaintLayer::HitTest 에서 페인트 레이어 트리를 탐색합니다.
5: PaintLayer::HitTestFragmentWithPhase에서 BoxFragmentPainter::NodeAtPoint 를 호출해서 요소가 이벤트의 대상인지 확인합니다.
(GetLayoutObject().NodeAtPoint는 별도의 검사를 하지 않는 코드인것으로 보입니다.)
이 과정에서 다음과 같은 조건들을 검사합니다.
1: CSS 의 pointer-events 값이 none 이면 패스.
2: CSS 의 visibility 값이 hiddne 이나 collapse 이면 패스
3: clip: rect 값을 읽어 클릭한 좌표값이 범위 안에 있는지 확인합니다.
4: overflow 값을 읽어 화면에 보이는 영역을 판별하고 클릭한 좌표값이 범위 안에 있는지 확인합니다.
5: width, height 값들을 읽어 클릭한 좌표값이 실제로 범위 안쪽인지 확인.