Reviewed by Dave Hyatt.
authorandersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Mar 2007 02:45:08 +0000 (02:45 +0000)
committerandersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Mar 2007 02:45:08 +0000 (02:45 +0000)
        <rdar://problem/5067983>
        iSale: Crash occurs at WebFrameLoaderClient::dispatchDecidePolicyForMIMEType() when attempting to load a HTML template

        Restore old behavior (broke in r14533) where the resource load and download delegates are retained for as long as the
        data source is loading.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createDocumentLoader):
        * WebView/WebDocumentLoaderMac.h:
        * WebView/WebDocumentLoaderMac.mm:
        (WebDocumentLoaderMac::setDataSource):
        (WebDocumentLoaderMac::decreaseLoadCount):

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

WebKit/ChangeLog
WebKit/WebCoreSupport/WebFrameLoaderClient.mm
WebKit/WebView/WebDocumentLoaderMac.h
WebKit/WebView/WebDocumentLoaderMac.mm

index 632bedf..c2a2208 100644 (file)
@@ -1,3 +1,20 @@
+2007-03-19  Anders Carlsson  <acarlsson@apple.com>
+
+        Reviewed by Dave Hyatt.
+
+        <rdar://problem/5067983>
+        iSale: Crash occurs at WebFrameLoaderClient::dispatchDecidePolicyForMIMEType() when attempting to load a HTML template
+        
+        Restore old behavior (broke in r14533) where the resource load and download delegates are retained for as long as the 
+        data source is loading.
+        
+        * WebCoreSupport/WebFrameLoaderClient.mm:
+        (WebFrameLoaderClient::createDocumentLoader):
+        * WebView/WebDocumentLoaderMac.h:
+        * WebView/WebDocumentLoaderMac.mm:
+        (WebDocumentLoaderMac::setDataSource):
+        (WebDocumentLoaderMac::decreaseLoadCount):
+
 2007-03-19  Geoffrey Garen  <ggaren@apple.com>
 
         Speculative fix for why ASSERT_MAIN_THREAD didn't work for me. (The
index b47cfc6..630b9af 100644 (file)
@@ -879,7 +879,7 @@ PassRefPtr<DocumentLoader> WebFrameLoaderClient::createDocumentLoader(const Reso
     RefPtr<WebDocumentLoaderMac> loader = new WebDocumentLoaderMac(request, substituteData);
 
     WebDataSource *dataSource = [[WebDataSource alloc] _initWithDocumentLoader:loader.get()];
-    loader->setDataSource(dataSource);
+    loader->setDataSource(dataSource, getWebView(m_webFrame.get()));
     [dataSource release];
 
     return loader.release();
index 105e217..20edafa 100644 (file)
  */
 
 #import <WebCore/DocumentLoader.h>
+#import <WebCore/RetainPtr.h>
 #import <wtf/HashSet.h>
 
 @class WebDataSource;
+@class WebView;
 
 namespace WebCore {
     class ResourceRequest;
@@ -40,7 +42,7 @@ class WebDocumentLoaderMac : public WebCore::DocumentLoader
 public:
     WebDocumentLoaderMac(const WebCore::ResourceRequest&, const WebCore::SubstituteData&);
 
-    void setDataSource(WebDataSource *);
+    void setDataSource(WebDataSource *, WebView*);
     WebDataSource *dataSource() const;
 
     virtual void attachToFrame();
@@ -50,6 +52,8 @@ public:
     void decreaseLoadCount(unsigned long identifier);
 private:
     WebDataSource *m_dataSource;
+    WebCore::RetainPtr<id> m_resourceLoadDelegate;
+    WebCore::RetainPtr<id> m_downloadDelegate;
     bool m_hasEverBeenDetached;
     HashSet<unsigned long> m_loadingResources;
 };
index c61b358..4ab330e 100644 (file)
@@ -32,6 +32,8 @@
 #import <WebCore/SubstituteData.h>
 #import <WebCore/FoundationExtras.h>
 
+#import "WebView.h"
+
 using namespace WebCore;
 
 WebDocumentLoaderMac::WebDocumentLoaderMac(const ResourceRequest& request, const SubstituteData& substituteData)
@@ -41,11 +43,14 @@ WebDocumentLoaderMac::WebDocumentLoaderMac(const ResourceRequest& request, const
 {
 }
 
-void WebDocumentLoaderMac::setDataSource(WebDataSource *dataSource)
+void WebDocumentLoaderMac::setDataSource(WebDataSource *dataSource, WebView* webView)
 {
     ASSERT(!m_dataSource);
     HardRetain(dataSource);
     m_dataSource = dataSource;
+    
+    m_resourceLoadDelegate = [webView resourceLoadDelegate];
+    m_downloadDelegate = [webView downloadDelegate];
 }
 
 WebDataSource *WebDocumentLoaderMac::dataSource() const
@@ -89,6 +94,9 @@ void WebDocumentLoaderMac::decreaseLoadCount(unsigned long identifier)
     
     m_loadingResources.remove(identifier);
     
-    if (m_loadingResources.isEmpty())
+    if (m_loadingResources.isEmpty()) {
+        m_resourceLoadDelegate = 0;
+        m_downloadDelegate = 0;
         HardRelease(m_dataSource);
+    }
 }