三態:policy provisional committed
FrameLoader::loadWithDocumentLoader將觸發導航裁決,調用setPolicyDocumentLoader(loader), 進入policy 狀態,
導航裁決通過后,FrameLoader::continueLoadAfterNavigationPolicy將被調用,即Policy后的繼續加載,
setProvisionalDocumentLoader(m_policyDocumentLoader.get()); //設置ProvisionalDocumentLoader
setState(FrameStateProvisional);//continueLoadAfterNavigationPolicy將FrameLoader對象的狀態轉換為“FrameStateProvisional”,
setPolicyDocumentLoader(0);//刪除PolicyDocumentLoader
并在下一步的continueLoadAfterWillSubmitForm函數中調用DocumentLoader::startLoadingMainResource開始主資源加載。startLoadingMainResource中將創建MainResourceLoader對象。
--> FrameLoader::load // load 函數1
--> FrameLoader::load // oad函數2, 此處創建一個 DocumentLoader 對象
--> FrameLoader::load(newDocumentLoader) // load函數3,
-->FrameLoader::loadWithDocumentLoader
-->FrameLoader::setPolicyDocumentLoader(loader); // loader 即那個新DocumentLoader 對象, 擔當PolicyDocumentLoader
-->PolicyChecker::checkNavigationPolicy // 導航裁決? 并傳人回調函數callContinueLoadAfterNavigationPolicy
* 導航裁決后的處理FrameLoader::callContinueLoadAfterNavigationPolicy
-->FrameLoader::callContinueLoadAfterNavigationPolicy
-->FrameLoader::continueLoadAfterNavigationPolicy
-->FrameLoader::setProvisionalDocumentLoader(m_policyDocumentLoader.get()); // 那個新DocumentLoader對象又擔當ProvisionalDocumentLoader
-->FrameLoader::setState(FrameStateProvisional); // 轉變為FrameStateProvisional狀態
-->FrameLoader::setPolicyDocumentLoader(0); // 清除PolicyDocumentLoader,以上3行完成狀態切換