| Index: content/shell/renderer/test_runner/web_test_proxy.cc | 
| diff --git a/content/shell/renderer/test_runner/web_test_proxy.cc b/content/shell/renderer/test_runner/web_test_proxy.cc | 
| index d7a33f15f8b2abcdf5efc6ba40718cf7ee32a144..b47c255f0aa88b13ed2bfe586a99f20489e3aa3a 100644 | 
| --- a/content/shell/renderer/test_runner/web_test_proxy.cc | 
| +++ b/content/shell/renderer/test_runner/web_test_proxy.cc | 
| @@ -927,7 +927,7 @@ bool WebTestProxyBase::DidFailProvisionalLoad(blink::WebLocalFrame* frame, | 
| PrintFrameDescription(delegate_, frame); | 
| delegate_->printMessage(" - didFailProvisionalLoadWithError\n"); | 
| } | 
| -  LocationChangeDone(frame); | 
| +  CheckDone(frame, MainResourceLoadFailed); | 
| return !frame->provisionalDataSource(); | 
| } | 
|  | 
| @@ -992,7 +992,7 @@ void WebTestProxyBase::DidFailLoad(blink::WebLocalFrame* frame, | 
| PrintFrameDescription(delegate_, frame); | 
| delegate_->printMessage(" - didFailLoadWithError\n"); | 
| } | 
| -  LocationChangeDone(frame); | 
| +  CheckDone(frame, MainResourceLoadFailed); | 
| } | 
|  | 
| void WebTestProxyBase::DidFinishLoad(blink::WebLocalFrame* frame) { | 
| @@ -1000,7 +1000,7 @@ void WebTestProxyBase::DidFinishLoad(blink::WebLocalFrame* frame) { | 
| PrintFrameDescription(delegate_, frame); | 
| delegate_->printMessage(" - didFinishLoadForFrame\n"); | 
| } | 
| -  LocationChangeDone(frame); | 
| +  CheckDone(frame, LoadFinished); | 
| } | 
|  | 
| void WebTestProxyBase::DidDetectXSS(blink::WebLocalFrame* frame, | 
| @@ -1160,6 +1160,9 @@ void WebTestProxyBase::DidFinishResourceLoad(blink::WebLocalFrame* frame, | 
| delegate_->printMessage(" - didFinishLoading\n"); | 
| } | 
| resource_identifier_map_.erase(identifier); | 
| +#if !defined(ENABLE_LOAD_COMPLETION_HACKS) | 
| +  CheckDone(frame, ResourceLoadCompleted); | 
| +#endif | 
| } | 
|  | 
| void WebTestProxyBase::DidAddMessageToConsole( | 
| @@ -1204,9 +1207,21 @@ void WebTestProxyBase::DidAddMessageToConsole( | 
| delegate_->printMessage(std::string("\n")); | 
| } | 
|  | 
| -void WebTestProxyBase::LocationChangeDone(blink::WebFrame* frame) { | 
| +void WebTestProxyBase::CheckDone(blink::WebLocalFrame* frame, | 
| +                                 CheckDoneReason reason) { | 
| if (frame != test_interfaces_->GetTestRunner()->topLoadingFrame()) | 
| return; | 
| + | 
| +#if !defined(ENABLE_LOAD_COMPLETION_HACKS) | 
| +  // Quirk for MHTML prematurely completing on resource load completion. | 
| +  std::string mime_type = frame->dataSource()->response().mimeType().utf8(); | 
| +  if (reason == ResourceLoadCompleted && mime_type == "multipart/related") | 
| +    return; | 
| + | 
| +  if (reason != MainResourceLoadFailed && | 
| +      (frame->isResourceLoadInProgress() || frame->isLoading())) | 
| +    return; | 
| +#endif | 
| test_interfaces_->GetTestRunner()->setTopLoadingFrame(frame, true); | 
| } | 
|  | 
|  |