Reviewed by Adam.
authorandersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 8 Mar 2007 07:15:04 +0000 (07:15 +0000)
committerandersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 8 Mar 2007 07:15:04 +0000 (07:15 +0000)
        <rdar://problem/4981000>
        http://bugs.webkit.org/show_bug.cgi?id=12634
        REGRESSION: crash loading web archive (12634)

        The reason this bug wasn't always reproducible is that it involved sending an event to a plugin while
        the page was loading. Before we send the event to the plugin we defer loads. The problem was that
        MainResourceLoader::setDefersLoad would not work with data loads.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setRequest):
        Only set m_committed to false if we also have a valid unreachable URL.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::setDefersLoading):
        Make sure to stop and start data loads.

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

WebCore/ChangeLog
WebCore/loader/DocumentLoader.cpp
WebCore/loader/MainResourceLoader.cpp

index 568749b..0f5d3d0 100644 (file)
@@ -1,3 +1,23 @@
+2007-03-07  Anders Carlsson  <acarlsson@apple.com>
+
+        Reviewed by Adam.
+
+        <rdar://problem/4981000> 
+        http://bugs.webkit.org/show_bug.cgi?id=12634
+        REGRESSION: crash loading web archive (12634)
+        
+        The reason this bug wasn't always reproducible is that it involved sending an event to a plugin while 
+        the page was loading. Before we send the event to the plugin we defer loads. The problem was that
+        MainResourceLoader::setDefersLoad would not work with data loads.
+        
+        * loader/DocumentLoader.cpp:
+        (WebCore::DocumentLoader::setRequest):
+        Only set m_committed to false if we also have a valid unreachable URL.
+        
+        * loader/MainResourceLoader.cpp:
+        (WebCore::MainResourceLoader::setDefersLoading):
+        Make sure to stop and start data loads.
+
 2007-03-07  Krzysztof Kowalczyk  <kkowalczyk@gmail.com>
 
         Not reviewed.
index 7559130..0eea5bd 100644 (file)
@@ -204,7 +204,7 @@ void DocumentLoader::setRequest(const ResourceRequest& req)
     // redirect at this point, but we can replace a committed dataSource.
     bool handlingUnreachableURL = false;
 
-    handlingUnreachableURL = substituteData().isValid();
+    handlingUnreachableURL = m_substituteData.isValid() && !m_substituteData.failingURL().isEmpty();
 
     if (handlingUnreachableURL)
         m_committed = false;
index affa66e..0d2719d 100644 (file)
@@ -396,8 +396,17 @@ bool MainResourceLoader::load(const ResourceRequest& r, const SubstituteData&  s
 void MainResourceLoader::setDefersLoading(bool defers)
 {
     ResourceLoader::setDefersLoading(defers);
-    if (!defers) {
-        if (!m_initialRequest.isNull()) {
+    
+    if (defers) {
+        if (m_dataLoadTimer.isActive())
+            m_dataLoadTimer.stop();
+    } else {
+        if (m_initialRequest.isNull())
+            return;
+        
+        if (m_substituteData.isValid())
+            m_dataLoadTimer.startOneShot(0);
+        else {
             ResourceRequest r(m_initialRequest);
             m_initialRequest = ResourceRequest();
             loadNow(r);