블로그 이미지
ssun++

카테고리

[전체] (73)
Android (7)
JavaScript (9)
CI (5)
Language (14)
ETC (38)
Total324,886
Today0
Yesterday2
[시작]
외부 리소스 만으로는 기능을 다 할 수 없기 때문에 WebCore와 연동이 필요합니다.

[Agent들]
WebCore에는 Inspector의 개별 기능을 담당하는 agent들이 있습니다.
agent는 InspectorXXXAgent라는 이름을 가지며 기능단위로 분리되어 있습니다.
(예. InspectorDOMAgent, InspectorConsoleAgent 등등)

[Message 던지기]
Inspector는 실제로는 WebKit 외부의 html 페이지입니다.
WebCore와의 연동을 위한 연결 고리가 필요하며, InspectorFrontendHost가 그 역할을 합니다.
(inspector.js의 WebInspector는 js에서 정의한 object이며 WebKit의 WebInspector와는 무관)

WebCore/inspector/InspectorFrontendHost.idl 파일을 통해
<빌드경로>/obj/DerivedSources/JSInspectorFrontendHost.cpp가 생성됩니다.
이는 외부에서 InspectorFrontendHost라는 object를 사용할 수 있다는 뜻이며,
실제 함수 호출은 InspectorFrontendHost.cpp의 함수들을 호출합니다.

WebCore로 던질 수 있는 message는 JSON 형태이며 InspectorBackendStub.js에 정의되어 있습니다.
InspectorFrontendHost.prototype.sendMessageToBackend() 메소드를 통해 WebCore로 전달됩니다.
여차저차 하여 InspectorBackendDispatcher에서 message를 파싱하고
message에 해당하는 agent를 찾아 필요한 함수를 호출하게 됩니다.

대략적인 구조는 아래와 같습니다 (파란색은 외부 js, 오렌지색은 WebCore).
 

[끝]
쓸 얘기는 다 쓴 것 같은데 급하게 정리한 느낌이 나네요 :p
아무튼 Inspector 얘기는 마무리. 
Posted by ssun++

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함