Index: third_party/WebKit/Source/core/loader/FrameLoader.cpp |
diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
index 28d99d964d16b432e27c8878e60e5c31b3d20acc..4d637cc886766eec724d48b64ff2982c257d3d59 100644 |
--- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
+++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
@@ -1214,15 +1214,18 @@ void FrameLoader::receivedMainResourceError(DocumentLoader* loader, const Resour |
if (loader != m_provisionalDocumentLoader) |
return; |
detachDocumentLoader(m_provisionalDocumentLoader); |
- m_progressTracker->progressCompleted(); |
+ // If the provisional load failed, and we haven't yet rendered anything |
+ // into the frame, then act as though the non-provisional loader failed |
+ // as well. If we don't do this, the main load will never finish. |
+ if (!stateMachine()->committedFirstRealDocumentLoad()) |
+ m_documentLoader->setSentDidFinishLoad(); |
} else { |
ASSERT(loader == m_documentLoader); |
if (m_frame->document()->parser()) |
m_frame->document()->parser()->stopParsing(); |
- m_documentLoader->setSentDidFinishLoad(); |
- if (!m_provisionalDocumentLoader && m_frame->isLoading()) { |
+ if (!m_documentLoader->sentDidFinishLoad()) { |
client()->dispatchDidFailLoad(error, historyCommitType); |
- m_progressTracker->progressCompleted(); |
+ m_documentLoader->setSentDidFinishLoad(); |
} |
} |
checkCompleted(); |