[Site Isolation] Per-frame walk replaces navigatedFrameID heuristic in back/forward routing
0b955f5
Site Isolation은 cross-origin iframe마다 별도의 WebContent process를 할당하고, UIProcess가 이를 조율합니다. Back/forward 탐색 시 UIProcess는 어떤 frame이 이동해야 하는지 파악하고, 각 owning process에 GoToBackForwardItem IPC를 전송해야 합니다. 기존 코드는 navigatedFrameID를 통해 단일 "primary" frame을 선택했습니다. 이 필드는 호출자가 이동하려는 frame이 아니라, 어떤 child frame의 탐색이 항목을 생성했는지를 인코딩한 값입니다. 그 결과 back 동작과는 일치했지만, forward에서는 어긋나는 문제가 있었습니다.
Source/WebKit/UIProcess/WebPageProxy.cpp
bool WebPageProxy::dispatchPerFrameTraversals(WebBackForwardListFrameItem& currentItem,
WebBackForwardListFrameItem& targetItem)
{
bool dispatched = false;
if (currentItem.itemSequenceNumber() != targetItem.itemSequenceNumber())
dispatched |= sendGoToBackForwardItemForFrame(targetItem);
if (currentItem.documentSequenceNumber() == targetItem.documentSequenceNumber()) {
for (auto& [frameID, childTarget] : targetItem.children()) {
if (auto* childCurrent = currentItem.childItemForFrameID(frameID))
dispatched |= dispatchPerFrameTraversals(*childCurrent, *childTarget);
}
}
return dispatched;
}
UIProcess는 이제 (current, target) WebBackForwardListFrameItem 트리를 쌍으로 순회하며, itemSequenceNumber가 다른 frame의 process에 독립적인 GoToBackForwardItem을 전송합니다. 재귀는 documentSequenceNumber가 동일한 경우에만 진입하며, cross-document subtree에서는 순회를 멈추고 기존 pull-at-commit 메커니즘에 위임합니다. 이 변경은 useUIProcessForBackForwardItemLoading 플래그 뒤에 위치하며, 플래그가 비활성화된 경우에는 기존 navigatedFrameID 경로가 그대로 유지됩니다.
Significance
이로써 back과 forward 양방향에서 multi-process iframe 순회가 올바르고 대칭적으로 동작하게 됩니다. 이는 security boundary에서 cross-origin frame 탐색의 정확성에 직접적인 영향을 미칩니다.
Audit directions
Aaaaaaaaaaaaaaaaaaaaaaaaa Aa Aa Aaa Aaaaa Aaaa Aa Aaaaaaaaaaaaa Aaa Aaaaaaaaaaaaaa Aaa Aaaa Aaaa a Aa Aaa a a Aaaa Aaa Aaaa Aaaa Aaaaa a Aa Aaaaaa Aaaaaaaaaaaa Aaa Aa Aaa Aaaa Aaaaaa Aaaaa Aaaa Aaaaa Aaaaaa Aaaa a Aaaa a Aaaaaaaaa Aaa Aaaaa Aa Aaaa Aaa Aaaaaa
Aaaaaaaaaaaaaaaaaaaaa Aa Aaaaaaa Aaa Aaaaaaaaa Aaaaaa Aaaaaaaaaaaaa Aaaaaaaaa Aaaa Aaaaa Aaa Aaa Aaaaaaaaaaaaaaaaa Aa Aa Aaaa Aaaaa Aaaaaaaa Aa Aa a Aaaaaaaa Aaaaaa Aa Aa Aaaaaaa Aa Aaaaa Aaaaa Aaaaaaa Aaaa Aaaaa
Aaa Aaaa Aa a Aaaa Aaaaa Aaa Aaaaaa a Aaaa Aaaa Aaa Aaaaaaa Aaaaaa Aa Aaaa Aaaaa Aaa Aaaa Aaaa Aaaaaaaaaaaa Aaaa a Aa Aa Aa a Aa Aaaaaa Aaaaa Aaa Aaa Aaaaaaaa Aa Aa Aaaaaaaaaaaa Aaaaa Aaaa Aaaa Aaaa Aaaa Aaaa
🔒Multi-process dispatch at a site isolation boundary with new recursive traversal logic — several edge cases in boundary detection and dispatch ordering are worth investigating.
더 확인하려면 구독해 주세요