REGRESSION(r146223): chromium asserts/crashes in DocumentLoader
authorjaphet@chromium.org <japhet@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Mar 2013 22:16:19 +0000 (22:16 +0000)
committerjaphet@chromium.org <japhet@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Mar 2013 22:16:19 +0000 (22:16 +0000)
https://bugs.webkit.org/show_bug.cgi?id=112745

Reviewed by Kenneth Russell.

Fixes layout tests on chromium debug

* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::mainReceivedError): Frame might be detached, get
    defersLoading() from mainResourceLoader().
(WebCore::DocumentLoader::responseReceived): RefPtr got dropped, it's really needed.
(WebCore::DocumentLoader::receivedData): Frame might be detached, get
    defersLoading() from mainResourceLoader().
(WebCore::DocumentLoader::cancelMainResourceLoad): The ResourceError parameter
    can be null if coming from the WebKit layer, we should have a default just in case.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@146267 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/loader/DocumentLoader.cpp

index ff9afb6..8a6de31 100644 (file)
@@ -1,3 +1,21 @@
+2013-03-19  Nate Chapin  <japhet@chromium.org>
+
+        REGRESSION(r146223): chromium asserts/crashes in DocumentLoader
+        https://bugs.webkit.org/show_bug.cgi?id=112745
+
+        Reviewed by Kenneth Russell.
+
+        Fixes layout tests on chromium debug
+
+        * loader/DocumentLoader.cpp:
+        (WebCore::DocumentLoader::mainReceivedError): Frame might be detached, get
+            defersLoading() from mainResourceLoader().
+        (WebCore::DocumentLoader::responseReceived): RefPtr got dropped, it's really needed.
+        (WebCore::DocumentLoader::receivedData): Frame might be detached, get
+            defersLoading() from mainResourceLoader().
+        (WebCore::DocumentLoader::cancelMainResourceLoad): The ResourceError parameter
+            can be null if coming from the WebKit layer, we should have a default just in case.
+
 2013-03-19  Geoffrey Garen  <ggaren@apple.com>
 
         Refactored script content removal in the fragment parser for clarity and speed
index 029a7d8..9dbb4fd 100644 (file)
@@ -230,7 +230,7 @@ void DocumentLoader::mainReceivedError(const ResourceError& error)
     // There is a bug in CFNetwork where callbacks can be dispatched even when loads are deferred.
     // See <rdar://problem/6304600> for more details.
 #if !USE(CF)
-    ASSERT(!m_frame->page()->defersLoading());
+    ASSERT(!mainResourceLoader() || !mainResourceLoader()->defersLoading());
 #endif
 
     m_applicationCacheHost->failedLoadingMainResource();
@@ -526,6 +526,7 @@ void DocumentLoader::continueAfterNavigationPolicy(const ResourceRequest&, bool
 
 void DocumentLoader::responseReceived(const ResourceResponse& response)
 {
+    RefPtr<DocumentLoader> protect(this);
     bool willLoadFallback = m_applicationCacheHost->maybeLoadFallbackForMainResponse(request(), response);
 
     // The memory cache doesn't understand the application cache or its caching rules. So if a main resource is served
@@ -560,7 +561,7 @@ void DocumentLoader::responseReceived(const ResourceResponse& response)
     // There is a bug in CFNetwork where callbacks can be dispatched even when loads are deferred.
     // See <rdar://problem/6304600> for more details.
 #if !USE(CF)
-    ASSERT(!m_frame->page()->defersLoading());
+    ASSERT(!mainResourceLoader() || !mainResourceLoader()->defersLoading());
 #endif
 
     if (m_isLoadingMultipartContent) {
@@ -802,7 +803,7 @@ void DocumentLoader::receivedData(const char* data, int length)
     // There is a bug in CFNetwork where callbacks can be dispatched even when loads are deferred.
     // See <rdar://problem/6304600> for more details.
 #if !USE(CF)
-    ASSERT(!m_frame->page()->defersLoading());
+    ASSERT(!mainResourceLoader() || !mainResourceLoader()->defersLoading());
 #endif
 
 #if USE(CONTENT_FILTERING)
@@ -1391,10 +1392,10 @@ void DocumentLoader::startLoadingMainResource()
     setRequest(request);
 }
 
-void DocumentLoader::cancelMainResourceLoad(const ResourceError& error)
+void DocumentLoader::cancelMainResourceLoad(const ResourceError& resourceError)
 {
-    ASSERT(!error.isNull());
     RefPtr<DocumentLoader> protect(this);
+    ResourceError error = resourceError.isNull() ? frameLoader()->cancelledError(m_request) : resourceError;
 
     m_dataLoadTimer.stop();
     if (m_waitingForContentPolicy) {