2010-01-22 Maciej Stachowiak <mjs@apple.com>
authormjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 23 Jan 2010 00:43:37 +0000 (00:43 +0000)
committermjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 23 Jan 2010 00:43:37 +0000 (00:43 +0000)
        Reviewed by Adam Roben.

        Use stale cache data when going back and forward but not using WebCore’s page cache
        https://bugs.webkit.org/show_bug.cgi?id=33993
        <rdar://problem/7383392>

        No tests since this is a performance change.

        * loader/CachePolicy.h:
        (WebCore::): Add CachePolicyAllowStale.
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::checkForReload): Never reload in the case of
        CachePolicyAllowStale.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subresourceCachePolicy): Return CachePolicyAllowStale
        if the main resource is being loaded to allow stale data.
        (WebCore::FrameLoader::addExtraFieldsToRequest): Use ReturnCacheDataElseLoad
        on back/forward loads - needed when going back of forward to a page with frames.

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

WebCore/ChangeLog
WebCore/loader/CachePolicy.h
WebCore/loader/DocLoader.cpp
WebCore/loader/FrameLoader.cpp

index 2c38200fd75166f1c60064e6495c45f29c359f49..536e598c3bc1e282e99bc307bedeaba76047a9b4 100644 (file)
@@ -1,3 +1,24 @@
+2010-01-22  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Adam Roben.
+
+        Use stale cache data when going back and forward but not using WebCore’s page cache
+        https://bugs.webkit.org/show_bug.cgi?id=33993
+        <rdar://problem/7383392>
+
+        No tests since this is a performance change.
+
+        * loader/CachePolicy.h:
+        (WebCore::): Add CachePolicyAllowStale.
+        * loader/DocLoader.cpp:
+        (WebCore::DocLoader::checkForReload): Never reload in the case of
+        CachePolicyAllowStale.
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::subresourceCachePolicy): Return CachePolicyAllowStale
+        if the main resource is being loaded to allow stale data.
+        (WebCore::FrameLoader::addExtraFieldsToRequest): Use ReturnCacheDataElseLoad
+        on back/forward loads - needed when going back of forward to a page with frames.
+
 2010-01-22  Kelly Norton  <knorton@google.com>
 
         Reviewed by Pavel Feldman.
index 93f92b102c12703aa2d5ea60895c1fc1ca709bec..2639caa8f80a3091838927ff0e9ef439d72c3eda 100644 (file)
@@ -32,7 +32,8 @@ namespace WebCore {
         CachePolicyCache,
         CachePolicyVerify,
         CachePolicyRevalidate,
-        CachePolicyReload
+        CachePolicyReload,
+        CachePolicyAllowStale
     };
 
 }
index 5eb7acf9aee1ba1434afaef3c2b9231a3287875b..c34f81b7f8a3b2ce5e4570bc59a56556587f09ff 100644 (file)
@@ -111,8 +111,8 @@ void DocLoader::checkForReload(const KURL& fullURL)
     case CachePolicyRevalidate:
         cache()->revalidateResource(existing, this);
         break;
-    default:
-        ASSERT_NOT_REACHED();
+    case CachePolicyAllowStale:
+        return;
     }
 
     m_reloadedURLs.add(fullURL.string());
index 28cee794d2aa1b2126dca68ac5480b89aa398f13..415f28f2fdbdcb98911a14e6ae024860783532b0 100644 (file)
@@ -2902,6 +2902,9 @@ CachePolicy FrameLoader::subresourceCachePolicy() const
     if (m_loadType == FrameLoadTypeReload)
         return CachePolicyRevalidate;
 
+    if (request.cachePolicy() == ReturnCacheDataElseLoad)
+        return CachePolicyAllowStale;
+
     return CachePolicyVerify;
 }
 
@@ -3219,7 +3222,8 @@ void FrameLoader::addExtraFieldsToRequest(ResourceRequest& request, FrameLoadTyp
         request.setCachePolicy(ReloadIgnoringCacheData);
         request.setHTTPHeaderField("Cache-Control", "no-cache");
         request.setHTTPHeaderField("Pragma", "no-cache");
-    }
+    } else if (isBackForwardLoadType(loadType) && !request.url().protocolIs("https"))
+        request.setCachePolicy(ReturnCacheDataElseLoad);
     
     if (mainResource)
         request.setHTTPAccept(defaultAcceptHeader);