ASSERTION FAILED: !m_frame->page()->defersLoading() || InspectorInstrumentation:...
authorcarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Jul 2016 16:29:06 +0000 (16:29 +0000)
committercarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Jul 2016 16:29:06 +0000 (16:29 +0000)
https://bugs.webkit.org/show_bug.cgi?id=160193

Reviewed by Michael Catanzaro.

This is happening in the GTK+ Debug bot when running test loader/load-defer.html (note that the assert is inside
a !USE(CF) block).
The test is creating an iframe with load deferred, then in a timeout it disables the deferred load and checks
that the load actually happens. What happens is that the initial empty document is what calls
DocumentLoader::finishedLoading() when load is still deferred. The onload handler is not called because load
events are disabled for the initial empty document in SubframeLoader::loadSubframe(), but
DocumentLoader::finishedLoading() is called unconditionally from maybeLoadEmpty(). I think it's fine to call
DocumentLoader::finishedLoading() for the initial empty document even when load is deferred, so we can simply
update the assert to handle that case.

* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::finishedLoading): Do not assert if called for the initial empty document when load is
deferred.

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

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

index 9b8fb0b..1f32bc4 100644 (file)
@@ -1,3 +1,24 @@
+2016-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        ASSERTION FAILED: !m_frame->page()->defersLoading() || InspectorInstrumentation::isDebuggerPaused(m_frame)
+        https://bugs.webkit.org/show_bug.cgi?id=160193
+
+        Reviewed by Michael Catanzaro.
+
+        This is happening in the GTK+ Debug bot when running test loader/load-defer.html (note that the assert is inside
+        a !USE(CF) block).
+        The test is creating an iframe with load deferred, then in a timeout it disables the deferred load and checks
+        that the load actually happens. What happens is that the initial empty document is what calls
+        DocumentLoader::finishedLoading() when load is still deferred. The onload handler is not called because load
+        events are disabled for the initial empty document in SubframeLoader::loadSubframe(), but
+        DocumentLoader::finishedLoading() is called unconditionally from maybeLoadEmpty(). I think it's fine to call
+        DocumentLoader::finishedLoading() for the initial empty document even when load is deferred, so we can simply
+        update the assert to handle that case.
+
+        * loader/DocumentLoader.cpp:
+        (WebCore::DocumentLoader::finishedLoading): Do not assert if called for the initial empty document when load is
+        deferred.
+
 2016-07-26  Youenn Fablet  <youenn@apple.com>
 
         Remove ClientCredentialPolicy cross-origin option from ResourceLoaderOptions
index 65f54ea..9558675 100644 (file)
@@ -398,7 +398,7 @@ void DocumentLoader::finishedLoading(double finishTime)
     // 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() || InspectorInstrumentation::isDebuggerPaused(m_frame));
+    ASSERT(!m_frame->page()->defersLoading() || frameLoader()->stateMachine().creatingInitialEmptyDocument() || InspectorInstrumentation::isDebuggerPaused(m_frame));
 #endif
 
     Ref<DocumentLoader> protectedThis(*this);