Reviewed by Geoff.
authorandersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Feb 2007 00:38:00 +0000 (00:38 +0000)
committerandersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Feb 2007 00:38:00 +0000 (00:38 +0000)
        Make resource load delegate methods pass the right document loader.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willSendRequest):
        (WebCore::FrameLoader::didReceiveResponse):
        (WebCore::FrameLoader::didReceiveData):
        (WebCore::FrameLoader::didFailToLoad):
        (WebCore::FrameLoader::didFinishLoad):
        (WebCore::FrameLoader::didReceiveAuthenticationChallenge):
        (WebCore::FrameLoader::didCancelAuthenticationChallenge):
        Use the resource loader's document loader instead of the active one.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError):
        Make it so we send the frame load delegate method before the resource load delegate method.
        This was a regression from 2.0 and was caused by the fix to rdar://problem/4609195. Because the way the loader
        now works, both delegate methods will be called.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::documentLoader):
        Add document loader pointer to ResourceLoader.

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

WebCore/ChangeLog
WebCore/loader/DocumentLoader.cpp
WebCore/loader/FrameLoader.cpp
WebCore/loader/MainResourceLoader.cpp
WebCore/loader/ResourceLoader.cpp
WebCore/loader/ResourceLoader.h

index a6ab4dc..ca0b2c6 100644 (file)
@@ -1,3 +1,31 @@
+2007-02-27  Anders Carlsson  <acarlsson@apple.com>
+
+        Reviewed by Geoff.
+
+        Make resource load delegate methods pass the right document loader.
+        
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::willSendRequest):
+        (WebCore::FrameLoader::didReceiveResponse):
+        (WebCore::FrameLoader::didReceiveData):
+        (WebCore::FrameLoader::didFailToLoad):
+        (WebCore::FrameLoader::didFinishLoad):
+        (WebCore::FrameLoader::didReceiveAuthenticationChallenge):
+        (WebCore::FrameLoader::didCancelAuthenticationChallenge):
+        Use the resource loader's document loader instead of the active one.
+        
+        * loader/MainResourceLoader.cpp:
+        (WebCore::MainResourceLoader::receivedError):
+        Make it so we send the frame load delegate method before the resource load delegate method.
+        This was a regression from 2.0 and was caused by the fix to rdar://problem/4609195. Because the way the loader
+        now works, both delegate methods will be called.
+        
+        * loader/ResourceLoader.cpp:
+        (WebCore::ResourceLoader::ResourceLoader):
+        * loader/ResourceLoader.h:
+        (WebCore::ResourceLoader::documentLoader):
+        Add document loader pointer to ResourceLoader.
+
 2007-02-27  Mitz Pettel  <mitz@webkit.org>
 
         Reviewed by Hyatt.
index fd42c58..b855bb0 100644 (file)
@@ -662,7 +662,7 @@ bool DocumentLoader::startLoadingMainResource(unsigned long identifier)
     // If not, it would be great to remove this line of code.
     frameLoader()->addExtraFieldsToRequest(m_request, true, false);
 
-    if (!m_mainResourceLoader->load(m_request, substituteData())) {
+    if (!m_mainResourceLoader->load(m_request, m_substituteData)) {
         // FIXME: If this should really be caught, we should just ASSERT this doesn't happen;
         // should it be caught by other parts of WebKit or other parts of the app?
         LOG_ERROR("could not create WebResourceHandle for URL %s -- should be caught by policy handler level", m_request.url().url().ascii());
index 16cff2e..17f385c 100644 (file)
@@ -2651,6 +2651,7 @@ void FrameLoader::checkLoadCompleteForThisFrame()
 
     ASSERT_NOT_REACHED();
 }
+
 void FrameLoader::continueAfterContentPolicy(PolicyAction policy)
 {
     PolicyCheck check = m_policyCheck;
@@ -2989,7 +2990,7 @@ void FrameLoader::assignIdentifierToInitialRequest(unsigned long identifier, con
 void FrameLoader::willSendRequest(ResourceLoader* loader, ResourceRequest& clientRequest, const ResourceResponse& redirectResponse)
 {
     applyUserAgent(clientRequest);
-    m_client->dispatchWillSendRequest(activeDocumentLoader(), loader->identifier(), clientRequest, redirectResponse);
+    m_client->dispatchWillSendRequest(loader->documentLoader(), loader->identifier(), clientRequest, redirectResponse);
 }
 
 void FrameLoader::didReceiveResponse(ResourceLoader* loader, const ResourceResponse& r)
@@ -2998,14 +2999,14 @@ void FrameLoader::didReceiveResponse(ResourceLoader* loader, const ResourceRespo
     
     if (m_frame->page())
         m_frame->page()->progress()->incrementProgress(loader->identifier(), r);
-    m_client->dispatchDidReceiveResponse(activeDocumentLoader(), loader->identifier(), r);
+    m_client->dispatchDidReceiveResponse(loader->documentLoader(), loader->identifier(), r);
 }
 
 void FrameLoader::didReceiveData(ResourceLoader* loader, const char* data, int length, int lengthReceived)
 {
     if (m_frame->page())
         m_frame->page()->progress()->incrementProgress(loader->identifier(), data, length);
-    m_client->dispatchDidReceiveContentLength(activeDocumentLoader(), loader->identifier(), lengthReceived);
+    m_client->dispatchDidReceiveContentLength(loader->documentLoader(), loader->identifier(), lengthReceived);
 }
 
 void FrameLoader::didFailToLoad(ResourceLoader* loader, const ResourceError& error)
@@ -3013,7 +3014,7 @@ void FrameLoader::didFailToLoad(ResourceLoader* loader, const ResourceError& err
     if (m_frame->page())
         m_frame->page()->progress()->completeProgress(loader->identifier());
     if (!error.isNull())
-        m_client->dispatchDidFailLoading(activeDocumentLoader(), loader->identifier(), error);
+        m_client->dispatchDidFailLoading(loader->documentLoader(), loader->identifier(), error);
 }
 
 const ResourceRequest& FrameLoader::originalRequest() const
@@ -4070,17 +4071,17 @@ void FrameLoader::didFinishLoad(ResourceLoader* loader)
 {    
     if (m_frame->page())
         m_frame->page()->progress()->completeProgress(loader->identifier());
-    m_client->dispatchDidFinishLoading(activeDocumentLoader(), loader->identifier());
+    m_client->dispatchDidFinishLoading(loader->documentLoader(), loader->identifier());
 }
 
 void FrameLoader::didReceiveAuthenticationChallenge(ResourceLoader* loader, const AuthenticationChallenge& currentWebChallenge)
 {
-    m_client->dispatchDidReceiveAuthenticationChallenge(activeDocumentLoader(), loader->identifier(), currentWebChallenge);
+    m_client->dispatchDidReceiveAuthenticationChallenge(loader->documentLoader(), loader->identifier(), currentWebChallenge);
 }
 
 void FrameLoader::didCancelAuthenticationChallenge(ResourceLoader* loader, const AuthenticationChallenge& currentWebChallenge)
 {
-    m_client->dispatchDidCancelAuthenticationChallenge(activeDocumentLoader(), loader->identifier(), currentWebChallenge);
+    m_client->dispatchDidCancelAuthenticationChallenge(loader->documentLoader(), loader->identifier(), currentWebChallenge);
 }
 
 PolicyCheck::PolicyCheck()
index 015ce76..4f998bc 100644 (file)
@@ -62,16 +62,15 @@ void MainResourceLoader::receivedError(const ResourceError& error)
     // Calling receivedMainResourceError will likely result in the last reference to this object to go away.
     RefPtr<MainResourceLoader> protect(this);
 
+    frameLoader()->receivedMainResourceError(error, true);
+
     if (!cancelled()) {
         ASSERT(!reachedTerminalState());
         frameLoader()->didFailToLoad(this, error);
-    }
-
-    frameLoader()->receivedMainResourceError(error, true);
 
-    if (!cancelled())
         releaseResources();
-
+    }
+    
     ASSERT(reachedTerminalState());
 }
 
index 9d84d23..95bca83 100644 (file)
@@ -30,6 +30,7 @@
 #include "config.h"
 #include "ResourceLoader.h"
 
+#include "DocumentLoader.h"
 #include "Frame.h"
 #include "FrameLoader.h"
 #include "Page.h"
@@ -56,6 +57,7 @@ ResourceLoader::ResourceLoader(Frame* frame)
     , m_cancelled(false)
     , m_calledDidFinishLoad(false)
     , m_frame(frame)
+    , m_documentLoader(frame->loader()->activeDocumentLoader())
     , m_identifier(0)
     , m_defersLoading(frame->page()->defersLoading())
 {
@@ -64,7 +66,7 @@ ResourceLoader::ResourceLoader(Frame* frame)
 ResourceLoader::~ResourceLoader()
 {
     // FIXME: Once everything uses the loader, enable this assert again
-    //ASSERT(m_reachedTerminalState);
+    ASSERT(m_reachedTerminalState);
 }
 
 void ResourceLoader::releaseResources()
@@ -78,7 +80,8 @@ void ResourceLoader::releaseResources()
     RefPtr<ResourceLoader> protector(this);
 
     m_frame = 0;
-
+    m_documentLoader = 0;
+    
     // We need to set reachedTerminalState to true before we release
     // the resources to prevent a double dealloc of WebView <rdar://problem/4372628>
     m_reachedTerminalState = true;
index e2fd16f..9cd7196 100644 (file)
 
 #include <wtf/Forward.h>
 
-#if PLATFORM(MAC)
-
-#import <objc/objc.h>
-
-#ifdef __OBJC__
-@class NSCachedURLResponse;
-#else
-class NSCachedURLResponse;
-#endif
-#endif
-
 namespace WebCore {
 
+    class DocumentLoader;
     class Frame;
     class FrameLoader;
     class ResourceHandle;
@@ -65,8 +55,9 @@ namespace WebCore {
 
         virtual bool load(const ResourceRequest&);
 
-        FrameLoader *frameLoader() const;
-
+        FrameLoader* frameLoader() const;
+        DocumentLoader* documentLoader() const { return m_documentLoader.get(); }
+        
         virtual void cancel(const ResourceError&);
         ResourceError cancelledError();
 
@@ -88,9 +79,6 @@ namespace WebCore {
         void willStopBufferingData(const char*, int);
         virtual void didFinishLoading();
         virtual void didFail(const ResourceError&);
-#if PLATFORM(MAC)
-        NSCachedURLResponse *willCacheResponse(NSCachedURLResponse *);
-#endif
 
         void didReceiveAuthenticationChallenge(const AuthenticationChallenge&);
         void didCancelAuthenticationChallenge(const AuthenticationChallenge&);
@@ -134,6 +122,7 @@ namespace WebCore {
 protected:
         // FIXME: Once everything is made cross platform, these can be private instead of protected
         RefPtr<Frame> m_frame;
+        RefPtr<DocumentLoader> m_documentLoader;
         ResourceResponse m_response;
         unsigned long m_identifier;