Title: [88391] trunk/Source/WebCore
Revision
88391
Author
[email protected]
Date
2011-06-08 14:45:40 -0700 (Wed, 08 Jun 2011)

Log Message

2011-06-06  Nate Chapin  <[email protected]>

        Reviewed by Adam Barth.

        Remove all knowledge of CachedResourceRequests from
        CachedResourceLoader. This puts the full burden of
        canceling these requests on DocumentLoader (via
        SubresourceLoader), and makes a CachedResourceRequest
        an OwnPtr in CachedResource.

        https://bugs.webkit.org/show_bug.cgi?id=62308

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::load):
        (WebCore::CachedResource::stopLoading):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        (WebCore::CachedResourceLoader::loadDone):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::CachedResourceRequest):
        (WebCore::CachedResourceRequest::~CachedResourceRequest):
        (WebCore::CachedResourceRequest::load):
        (WebCore::CachedResourceRequest::didFinishLoading):
        (WebCore::CachedResourceRequest::didFail):
        (WebCore::CachedResourceRequest::didReceiveResponse):
        (WebCore::CachedResourceRequest::end):
        * loader/cache/CachedResourceRequest.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (88390 => 88391)


--- trunk/Source/WebCore/ChangeLog	2011-06-08 21:39:41 UTC (rev 88390)
+++ trunk/Source/WebCore/ChangeLog	2011-06-08 21:45:40 UTC (rev 88391)
@@ -1,3 +1,36 @@
+2011-06-06  Nate Chapin  <[email protected]>
+
+        Reviewed by Adam Barth.
+
+        Remove all knowledge of CachedResourceRequests from
+        CachedResourceLoader. This puts the full burden of
+        canceling these requests on DocumentLoader (via
+        SubresourceLoader), and makes a CachedResourceRequest
+        an OwnPtr in CachedResource.
+
+        https://bugs.webkit.org/show_bug.cgi?id=62308
+
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::stopLoading):
+        * loader/cache/CachedResource.cpp:
+        (WebCore::CachedResource::CachedResource):
+        (WebCore::CachedResource::load):
+        (WebCore::CachedResource::stopLoading):
+        * loader/cache/CachedResource.h:
+        * loader/cache/CachedResourceLoader.cpp:
+        (WebCore::CachedResourceLoader::~CachedResourceLoader):
+        (WebCore::CachedResourceLoader::loadDone):
+        * loader/cache/CachedResourceLoader.h:
+        * loader/cache/CachedResourceRequest.cpp:
+        (WebCore::CachedResourceRequest::CachedResourceRequest):
+        (WebCore::CachedResourceRequest::~CachedResourceRequest):
+        (WebCore::CachedResourceRequest::load):
+        (WebCore::CachedResourceRequest::didFinishLoading):
+        (WebCore::CachedResourceRequest::didFail):
+        (WebCore::CachedResourceRequest::didReceiveResponse):
+        (WebCore::CachedResourceRequest::end):
+        * loader/cache/CachedResourceRequest.h:
+
 2011-06-08  Mike Reed  <[email protected]>
 
         Reviewed by James Robinson.

Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (88390 => 88391)


--- trunk/Source/WebCore/loader/FrameLoader.cpp	2011-06-08 21:39:41 UTC (rev 88390)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp	2011-06-08 21:45:40 UTC (rev 88391)
@@ -433,9 +433,6 @@
         // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10537
         doc->setReadyState(Document::Complete);
 
-        if (CachedResourceLoader* cachedResourceLoader = doc->cachedResourceLoader())
-            cachedResourceLoader->cancelRequests();
-
 #if ENABLE(DATABASE)
         doc->stopDatabases(0);
 #endif

Modified: trunk/Source/WebCore/loader/cache/CachedResource.cpp (88390 => 88391)


--- trunk/Source/WebCore/loader/cache/CachedResource.cpp	2011-06-08 21:39:41 UTC (rev 88390)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp	2011-06-08 21:45:40 UTC (rev 88391)
@@ -81,7 +81,6 @@
 
 CachedResource::CachedResource(const ResourceRequest& request, Type type)
     : m_resourceRequest(request)
-    , m_request(0)
     , m_loadPriority(defaultPriorityForResourceType(type))
     , m_responseTimestamp(currentTime())
     , m_lastDecodedAccessTime(0)
@@ -136,9 +135,11 @@
 {
     m_sendResourceLoadCallbacks = sendResourceLoadCallbacks;
     m_loading = true;
-    RefPtr<CachedResourceRequest> request = CachedResourceRequest::load(cachedResourceLoader, this, incremental, securityCheck, sendResourceLoadCallbacks);
-    if (request)
-        cachedResourceLoader->loadStarted(this, request);
+    m_request = CachedResourceRequest::load(cachedResourceLoader, this, incremental, securityCheck, sendResourceLoadCallbacks);
+    if (m_request) {
+        m_status = Pending;
+        cachedResourceLoader->incrementRequestCount(this);
+    }
 }
 
 void CachedResource::checkNotify()
@@ -257,16 +258,15 @@
     return m_cachedMetadata.get();
 }
 
-void CachedResource::setRequest(CachedResourceRequest* request)
+void CachedResource::stopLoading()
 {
-    if (request && !m_request)
-        m_status = Pending;
-    m_request = request;
+    ASSERT(m_request);            
+    m_request.clear();
 
     // All loads finish with data(allDataReceived = true) or error(), except for
     // canceled loads, which silently set our request to 0. Be sure to notify our
     // client in that case, so we don't seem to continue loading forever.
-    if (!m_request && isLoading()) {
+    if (isLoading()) {
         setLoading(false);
         setStatus(Canceled);
         checkNotify();

Modified: trunk/Source/WebCore/loader/cache/CachedResource.h (88390 => 88391)


--- trunk/Source/WebCore/loader/cache/CachedResource.h	2011-06-08 21:39:41 UTC (rev 88390)
+++ trunk/Source/WebCore/loader/cache/CachedResource.h	2011-06-08 21:45:40 UTC (rev 88391)
@@ -163,7 +163,7 @@
     void setInLiveDecodedResourcesList(bool b) { m_inLiveDecodedResourcesList = b; }
     bool inLiveDecodedResourcesList() { return m_inLiveDecodedResourcesList; }
     
-    void setRequest(CachedResourceRequest*);
+    void stopLoading();
 
     SharedBuffer* data() const { ASSERT(!m_purgeableData); return m_data.get(); }
 
@@ -238,7 +238,7 @@
 
     ResourceRequest m_resourceRequest;
     String m_accept;
-    CachedResourceRequest* m_request;
+    OwnPtr<CachedResourceRequest> m_request;
     ResourceLoadPriority m_loadPriority;
 
     ResourceResponse m_response;

Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (88390 => 88391)


--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2011-06-08 21:39:41 UTC (rev 88390)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2011-06-08 21:45:40 UTC (rev 88391)
@@ -86,7 +86,6 @@
 CachedResourceLoader::CachedResourceLoader(Document* document)
     : m_document(document)
     , m_requestCount(0)
-    , m_loadDoneActionTimer(this, &CachedResourceLoader::loadDoneActionTimerFired)
     , m_autoLoadImages(true)
     , m_loadFinishing(false)
     , m_allowStaleResources(false)
@@ -97,7 +96,6 @@
 {
     m_document = 0;
 
-    cancelRequests();
     clearPreloads();
     DocumentResourceMap::iterator end = m_documentResources.end();
     for (DocumentResourceMap::iterator it = m_documentResources.begin(); it != end; ++it)
@@ -554,56 +552,20 @@
     m_documentResources.remove(resource->url());
 }
 
-void CachedResourceLoader::loadStarted(CachedResource* resource, PassRefPtr<CachedResourceRequest> request)
+void CachedResourceLoader::loadDone()
 {
-    ASSERT(request);
-    incrementRequestCount(resource);
-    m_requests.add(request);
-}
-
-void CachedResourceLoader::loadDone(CachedResourceRequest* request)
-{
     m_loadFinishing = false;
-    RefPtr<CachedResourceRequest> protect(request);
-    if (request)
-        m_requests.remove(request);
     if (frame())
         frame()->loader()->loadDone();
-
-    if (!request) {
-        // If the request passed to this function is null, loadDone finished synchronously from when
-        // the load was started, so we want to kick off our next set of loads (via checkForPendingPreloads
-        // and servePendingRequests) asynchronously.
-        m_loadDoneActionTimer.startOneShot(0);
-        return;
-    }
-
     performPostLoadActions();
 }
 
-void CachedResourceLoader::loadDoneActionTimerFired(Timer<CachedResourceLoader>*)
-{
-    performPostLoadActions();
-}
-
 void CachedResourceLoader::performPostLoadActions()
 {
     checkForPendingPreloads();
     resourceLoadScheduler()->servePendingRequests();
 }
 
-void CachedResourceLoader::cancelRequests()
-{
-    clearPendingPreloads();
-    Vector<CachedResourceRequest*, 256> requestsToCancel;
-    RequestSet::iterator end = m_requests.end();
-    for (RequestSet::iterator i = m_requests.begin(); i != end; ++i)
-        requestsToCancel.append((*i).get());
-
-    for (unsigned i = 0; i < requestsToCancel.size(); ++i)
-        requestsToCancel[i]->didFail(true);
-}
-
 void CachedResourceLoader::notifyLoadedFromMemoryCache(CachedResource* resource)
 {
     if (!resource || !frame() || resource->status() != CachedResource::Cached)

Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.h (88390 => 88391)


--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.h	2011-06-08 21:39:41 UTC (rev 88390)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.h	2011-06-08 21:45:40 UTC (rev 88391)
@@ -30,7 +30,6 @@
 #include "CachedResourceHandle.h"
 #include "CachePolicy.h"
 #include "ResourceLoadPriority.h"
-#include "Timer.h"
 #include <wtf/Deque.h>
 #include <wtf/HashMap.h>
 #include <wtf/HashSet.h>
@@ -42,7 +41,6 @@
 class CachedCSSStyleSheet;
 class CachedFont;
 class CachedImage;
-class CachedResourceRequest;
 class CachedScript;
 class CachedXSLStyleSheet;
 class Document;
@@ -92,10 +90,8 @@
 
     void removeCachedResource(CachedResource*) const;
 
-    void loadStarted(CachedResource*, PassRefPtr<CachedResourceRequest>);
     void loadFinishing() { m_loadFinishing = true; }
-    void loadDone(CachedResourceRequest*);
-    void cancelRequests();
+    void loadDone();
     
     void incrementRequestCount(const CachedResource*);
     void decrementRequestCount(const CachedResource*);
@@ -119,16 +115,11 @@
     void notifyLoadedFromMemoryCache(CachedResource*);
     bool canRequest(CachedResource::Type, const KURL&, bool forPreload = false);
 
-    void loadDoneActionTimerFired(Timer<CachedResourceLoader>*);
-
     void performPostLoadActions();
     
     HashSet<String> m_validatedURLs;
     mutable DocumentResourceMap m_documentResources;
     Document* m_document;
-
-    typedef HashSet<RefPtr<CachedResourceRequest> > RequestSet;
-    RequestSet m_requests;
     
     int m_requestCount;
     
@@ -139,8 +130,6 @@
         String m_charset;
     };
     Deque<PendingPreload> m_pendingPreloads;
-
-    Timer<CachedResourceLoader> m_loadDoneActionTimer;
     
     //29 bits left
     bool m_autoLoadImages : 1;

Modified: trunk/Source/WebCore/loader/cache/CachedResourceRequest.cpp (88390 => 88391)


--- trunk/Source/WebCore/loader/cache/CachedResourceRequest.cpp	2011-06-08 21:39:41 UTC (rev 88390)
+++ trunk/Source/WebCore/loader/cache/CachedResourceRequest.cpp	2011-06-08 21:45:40 UTC (rev 88391)
@@ -79,17 +79,15 @@
     , m_multipart(false)
     , m_finishing(false)
 {
-    m_resource->setRequest(this);
 }
 
 CachedResourceRequest::~CachedResourceRequest()
 {
-    m_resource->setRequest(0);
 }
 
-PassRefPtr<CachedResourceRequest> CachedResourceRequest::load(CachedResourceLoader* cachedResourceLoader, CachedResource* resource, bool incremental, SecurityCheckPolicy securityCheck, bool sendResourceLoadCallbacks)
+PassOwnPtr<CachedResourceRequest> CachedResourceRequest::load(CachedResourceLoader* cachedResourceLoader, CachedResource* resource, bool incremental, SecurityCheckPolicy securityCheck, bool sendResourceLoadCallbacks)
 {
-    RefPtr<CachedResourceRequest> request = adoptRef(new CachedResourceRequest(cachedResourceLoader, resource, incremental));
+    OwnPtr<CachedResourceRequest> request = adoptPtr(new CachedResourceRequest(cachedResourceLoader, resource, incremental));
 
     ResourceRequest resourceRequest = resource->resourceRequest();
     resourceRequest.setTargetType(cachedResourceTypeToTargetType(resource->type()));
@@ -130,7 +128,7 @@
         if (resource->resourceToRevalidate()) 
             memoryCache()->revalidationFailed(resource); 
         resource->error(CachedResource::LoadError);
-        return 0;
+        return PassOwnPtr<CachedResourceRequest>(nullptr);
     }
     request->m_loader = loader;
     return request.release();
@@ -165,21 +163,15 @@
         if (!m_resource->errorOccurred())
             m_resource->finish();
     }
-    m_cachedResourceLoader->loadDone(this);
+    end();
 }
 
-void CachedResourceRequest::didFail(SubresourceLoader*, const ResourceError&)
+void CachedResourceRequest::didFail(SubresourceLoader*, const ResourceError& error)
 {
-    if (!m_loader)
+    if (m_finishing || !m_loader)
         return;
-    didFail();
-}
 
-void CachedResourceRequest::didFail(bool cancelled)
-{
-    if (m_finishing)
-        return;
-
+    bool cancelled = error.isCancellation();
     LOG(ResourceLoading, "Failed to load '%s' (cancelled=%d).\n", m_resource->url().string().latin1().data(), cancelled);
 
     // Prevent the document from being destroyed before we are done with
@@ -201,7 +193,7 @@
     if (cancelled || !m_resource->isPreloaded())
         memoryCache()->remove(m_resource);
     
-    m_cachedResourceLoader->loadDone(this);
+    end();
 }
 
 void CachedResourceRequest::didReceiveResponse(SubresourceLoader* loader, const ResourceResponse& response)
@@ -221,7 +213,7 @@
             if (m_cachedResourceLoader->frame())
                 m_cachedResourceLoader->frame()->loader()->checkCompleted();
 
-            m_cachedResourceLoader->loadDone(this);
+            end();
             return;
         } 
         // Did not get 304 response, continue as a regular resource load.
@@ -281,5 +273,11 @@
     ASSERT(!m_resource->isCacheValidator());
     m_resource->setSerializedCachedMetadata(data, size);
 }
+    
+void CachedResourceRequest::end()
+{
+    m_cachedResourceLoader->loadDone();
+    m_resource->stopLoading();
+}
 
 } //namespace WebCore

Modified: trunk/Source/WebCore/loader/cache/CachedResourceRequest.h (88390 => 88391)


--- trunk/Source/WebCore/loader/cache/CachedResourceRequest.h	2011-06-08 21:39:41 UTC (rev 88390)
+++ trunk/Source/WebCore/loader/cache/CachedResourceRequest.h	2011-06-08 21:45:40 UTC (rev 88391)
@@ -26,6 +26,7 @@
 #include "SubresourceLoaderClient.h"
 #include <wtf/HashMap.h>
 #include <wtf/Noncopyable.h>
+#include <wtf/PassOwnPtr.h>
 #include <wtf/RefCounted.h>
 #include <wtf/RefPtr.h>
 
@@ -38,11 +39,10 @@
     class ResourceResponse;
     class SubresourceLoader;
 
-    class CachedResourceRequest : public RefCounted<CachedResourceRequest>, private SubresourceLoaderClient {
+    class CachedResourceRequest : private SubresourceLoaderClient {
     public:
-        static PassRefPtr<CachedResourceRequest> load(CachedResourceLoader*, CachedResource*, bool incremental, SecurityCheckPolicy, bool sendResourceLoadCallbacks);
+        static PassOwnPtr<CachedResourceRequest> load(CachedResourceLoader*, CachedResource*, bool incremental, SecurityCheckPolicy, bool sendResourceLoadCallbacks);
         ~CachedResourceRequest();
-        void didFail(bool cancelled = false);
 
         CachedResourceLoader* cachedResourceLoader() const { return m_cachedResourceLoader; }
 
@@ -54,6 +54,7 @@
         virtual void didReceiveCachedMetadata(SubresourceLoader*, const char*, int);
         virtual void didFinishLoading(SubresourceLoader*, double);
         virtual void didFail(SubresourceLoader*, const ResourceError&);
+        void end();
 
         RefPtr<SubresourceLoader> m_loader;
         CachedResourceLoader* m_cachedResourceLoader;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to