Web Inspector: introduce FrameDOMAgent for cross-origin iframe DOM tree access
c48671a
Source/WebCore/inspector/agents/frame/FrameDOMAgent.cpp
+FrameDOMAgent::FrameDOMAgent(WebCore::Frame& frame, BackendDispatcher& backendDispatcher)
+ : InspectorAgentBase("DOM"_s)
+ , m_frame(frame)
+ , m_backendDispatcher(InspectorDOMBackendDispatcher::create(backendDispatcher, this))
+ , m_destroyedNodesTimer(*this, &FrameDOMAgent::destroyedNodesTimerFired)
+{ }
Source/WebInspectorUI/UserInterface/Controllers/DOMManager.js
+_initializeFrameTarget(target)
+{
+ target.DOMAgent.getDocument().then((payload) => {
+ let documentNode = this._bindFrameTargetNode(target, payload.root);
+ this._frameTargetDocuments.set(target, documentNode);
+ this._spliceFrameDocumentIntoPageTree(target, documentNode);
+ });
+}
WebKit의 site isolation 모델에서 cross-origin iframe은 별도의 WebProcess 인스턴스에서 실행됩니다. 이로 인해 해당 subtree는 InspectorDOMAgent에 노출되지 않습니다. 이 commit은 각 frame의 WebProcess에 독립적인 FrameDOMAgent를 배포하는 방식으로 이 문제를 해결합니다.
Node ID는 process 내부에서만 유효한 정수입니다. 따라서 frontend에서는 targetId:nodeId 형태의 복합 문자열로 이를 구분하여 통합된 뷰를 유지합니다. cross-origin frame 문서는 처리 이후에 page tree에 삽입됩니다. 한편 didInsertDOMNode, didRemoveDOMNode 등의 mutation event handler는 연결되어 있지만, DOMObserver의 early-return을 통해 현재는 비활성화 상태입니다. 실시간 mutation 추적은 이후 패치에서 구현될 예정입니다.
Significance
Site isolation 환경에서의 완전한 cross-process DOM inspection을 향한 첫 번째 단계입니다. Inspector의 privilege boundary를 확장하고, 이후 패치가 기반으로 삼을 IPC 구조를 마련합니다.
Audit directions
a Aaaaaaaaaaaaaaa Aaaa Aa Aaaaaaaaaaaa Aaaaaaaaaaaaaaaaa Aaa Aaaa Aa Aaa Aaaaaa Aaaaaaaaaaaaaaaa Aaa Aaaaaaa Aaa Aaaaaaaaaaa Aaaaaaaaaa Aaaaa Aaaa Aaa Aaaa Aa Aaa Aaa Aaaaaaaa Aaa Aaa Aaa Aa Aaaaaaaaa Aaa Aa Aaaaaaa Aaaaaaaa Aaa Aaaa Aaaaa
a Aaaaaaaaaaaaa Aaaaaaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaaaaaaaaaaa Aaa Aaa Aaaaaa Aaa Aaaaaa Aaa Aaaaaaa Aaaaaaaaaaa Aaaaa Aa Aaaaaaa Aaaaa Aaaaaaaa Aaaaa Aaaa Aaaaa Aaa Aaaa Aaaaa
a Aaaaaaaaaaaaaaaaaa Aaaaaaaa Aa Aaaa Aaaaaaaaaaa Aaaaa Aaaaa Aaaaaaaaaaaaaaaa Aaaa Aaaa Aaaa Aaa Aaaaaaaaa Aaaaaa Aaa Aaa Aaaa Aaaa Aaaaaaaaaaaaaaaaaaaa Aaa Aaaaaaaaa Aaaaaa Aaaa Aa Aa Aaaaaa
a Aaaaaaaaaaaaaaaa Aaaaa Aaaaaaaaaaaa Aaaaaa Aaaaa Aaaa Aaaaaaaaaaa Aa Aaaaa Aaaaaa Aaaaaa Aaaaa Aaa Aa Aaa a Aaaa Aaa Aaa Aaaaaaa Aaaaaaaa Aaa Aaaa Aaaaa
🔒Cross-process node ID scoping and splice-time ordering in this new inspector path have several edge cases worth auditing.
더 확인하려면 구독해 주세요