Title: [187557] trunk/Source/WebCore
Revision
187557
Author
beid...@apple.com
Date
2015-07-29 14:26:59 -0700 (Wed, 29 Jul 2015)

Log Message

Crash in WebCore::DocumentLoader::stopLoadingForPolicyChange.
<rdar://problem/21412186> and https://bugs.webkit.org/show_bug.cgi?id=147418

Reviewed by Chris Dumez.

No new tests (No known reproducibility)

* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::responseReceived): When setting to m_waitingForContentPolicy true, make sure we have a FrameLoader.
(WebCore::DocumentLoader::detachFromFrame): Always explicitly call cancelPolicyCheckIfNeeded().
(WebCore::DocumentLoader::cancelPolicyCheckIfNeeded): Cancel the policy check if there is one.
(WebCore::DocumentLoader::cancelMainResourceLoad): Use cancelPolicyCheckIfNeeded().
* loader/DocumentLoader.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (187556 => 187557)


--- trunk/Source/WebCore/ChangeLog	2015-07-29 21:08:30 UTC (rev 187556)
+++ trunk/Source/WebCore/ChangeLog	2015-07-29 21:26:59 UTC (rev 187557)
@@ -1,5 +1,21 @@
 2015-07-29  Brady Eidson  <beid...@apple.com>
 
+        Crash in WebCore::DocumentLoader::stopLoadingForPolicyChange.
+        <rdar://problem/21412186> and https://bugs.webkit.org/show_bug.cgi?id=147418
+
+        Reviewed by Chris Dumez.
+
+        No new tests (No known reproducibility)
+
+        * loader/DocumentLoader.cpp:
+        (WebCore::DocumentLoader::responseReceived): When setting to m_waitingForContentPolicy true, make sure we have a FrameLoader.
+        (WebCore::DocumentLoader::detachFromFrame): Always explicitly call cancelPolicyCheckIfNeeded().
+        (WebCore::DocumentLoader::cancelPolicyCheckIfNeeded): Cancel the policy check if there is one.
+        (WebCore::DocumentLoader::cancelMainResourceLoad): Use cancelPolicyCheckIfNeeded().
+        * loader/DocumentLoader.h:
+
+2015-07-29  Brady Eidson  <beid...@apple.com>
+
         Crash calling webSocket.close() from onError handler for blocked web socket.
         <rdar://problem/21771620> and https://bugs.webkit.org/show_bug.cgi?id=147411
 

Modified: trunk/Source/WebCore/loader/DocumentLoader.cpp (187556 => 187557)


--- trunk/Source/WebCore/loader/DocumentLoader.cpp	2015-07-29 21:08:30 UTC (rev 187556)
+++ trunk/Source/WebCore/loader/DocumentLoader.cpp	2015-07-29 21:26:59 UTC (rev 187557)
@@ -652,6 +652,7 @@
     }
 
     ASSERT(!m_waitingForContentPolicy);
+    ASSERT(frameLoader());
     m_waitingForContentPolicy = true;
 
     // Always show content with valid substitute data.
@@ -950,6 +951,8 @@
 
     m_applicationCacheHost->setDOMApplicationCache(nullptr);
 
+    cancelPolicyCheckIfNeeded();
+
     // Even though we ASSERT at the top of this method that we have an m_frame, we're seeing crashes where m_frame is null.
     // This means either that a DocumentLoader is detaching twice, or is detaching before ever having attached.
     // Until we figure out how that is happening, null check m_frame before dereferencing it here.
@@ -958,8 +961,6 @@
         InspectorInstrumentation::loaderDetachedFromFrame(*m_frame, *this);
 
     m_frame = nullptr;
-    // The call to stopLoading() above should have canceled any pending content policy check.
-    ASSERT_WITH_MESSAGE(!m_waitingForContentPolicy, "The content policy callback needs a valid frame.");
 }
 
 void DocumentLoader::clearMainResourceLoader()
@@ -1468,18 +1469,23 @@
     setRequest(request);
 }
 
+void DocumentLoader::cancelPolicyCheckIfNeeded()
+{
+    if (m_waitingForContentPolicy && frameLoader())
+        frameLoader()->policyChecker().cancelCheck();
+
+    m_waitingForContentPolicy = false;
+}
+
 void DocumentLoader::cancelMainResourceLoad(const ResourceError& resourceError)
 {
     Ref<DocumentLoader> protect(*this);
     ResourceError error = resourceError.isNull() ? frameLoader()->cancelledError(m_request) : resourceError;
 
     m_dataLoadTimer.stop();
-    if (m_waitingForContentPolicy) {
-        frameLoader()->policyChecker().cancelCheck();
-        ASSERT(m_waitingForContentPolicy);
-        m_waitingForContentPolicy = false;
-    }
 
+    cancelPolicyCheckIfNeeded();
+
     if (mainResourceLoader())
         mainResourceLoader()->cancel(error);
 

Modified: trunk/Source/WebCore/loader/DocumentLoader.h (187556 => 187557)


--- trunk/Source/WebCore/loader/DocumentLoader.h	2015-07-29 21:08:30 UTC (rev 187556)
+++ trunk/Source/WebCore/loader/DocumentLoader.h	2015-07-29 21:26:59 UTC (rev 187557)
@@ -336,6 +336,8 @@
 
         void clearMainResource();
 
+        void cancelPolicyCheckIfNeeded();
+
 #if ENABLE(CONTENT_FILTERING)
         void becomeMainResourceClientIfFilterAllows();
         void installContentFilterUnblockHandler(ContentFilter&);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to