三态: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行完成状态切换