Changeset 159432 in webkit


Ignore:
Timestamp:
Nov 18, 2013 10:35:10 AM (10 years ago)
Author:
commit-queue@webkit.org
Message:

[curl] Add file cache
https://bugs.webkit.org/show_bug.cgi?id=123333

Patch by Mátyás Mustoha <mmatyas@inf.u-szeged.hu> on 2013-11-18
Reviewed by Brent Fulgham.

Implementation of on disc file cache
for the curl network backend.

  • WebCore.vcxproj/WebCore.vcxproj:
  • WebCore.vcxproj/WebCore.vcxproj.filters:
  • platform/network/curl/CurlCacheEntry.cpp: Added.

(WebCore::CurlCacheEntry::CurlCacheEntry):
(WebCore::CurlCacheEntry::~CurlCacheEntry):
(WebCore::CurlCacheEntry::isCached):
(WebCore::CurlCacheEntry::requestHeaders):
(WebCore::CurlCacheEntry::saveCachedData):
(WebCore::CurlCacheEntry::loadCachedData):
(WebCore::CurlCacheEntry::saveResponseHeaders):
(WebCore::CurlCacheEntry::loadResponseHeaders):
(WebCore::CurlCacheEntry::setResponseFromCachedHeaders):
(WebCore::CurlCacheEntry::didFail):
(WebCore::CurlCacheEntry::didFinishLoading):
(WebCore::CurlCacheEntry::generateBaseFilename):
(WebCore::CurlCacheEntry::loadFileToBuffer):
(WebCore::CurlCacheEntry::invalidate):
(WebCore::CurlCacheEntry::parseResponseHeaders):

  • platform/network/curl/CurlCacheEntry.h: Added.

(WebCore::CurlCacheEntry::isInMemory):

  • platform/network/curl/CurlCacheManager.cpp: Added.

(WebCore::CurlCacheManager::getInstance):
(WebCore::CurlCacheManager::CurlCacheManager):
(WebCore::CurlCacheManager::~CurlCacheManager):
(WebCore::CurlCacheManager::setCacheDirectory):
(WebCore::CurlCacheManager::loadIndex):
(WebCore::CurlCacheManager::saveIndex):
(WebCore::CurlCacheManager::didReceiveResponse):
(WebCore::CurlCacheManager::didFinishLoading):
(WebCore::CurlCacheManager::isCached):
(WebCore::CurlCacheManager::requestHeaders):
(WebCore::CurlCacheManager::didReceiveData):
(WebCore::CurlCacheManager::saveResponseHeaders):
(WebCore::CurlCacheManager::invalidateCacheEntry):
(WebCore::CurlCacheManager::didFail):
(WebCore::CurlCacheManager::loadCachedData):

  • platform/network/curl/CurlCacheManager.h: Added.

(WebCore::CurlCacheManager::getCacheDirectory):

  • platform/network/curl/ResourceHandleManager.cpp:

(WebCore::writeCallback):
(WebCore::headerCallback):
(WebCore::ResourceHandleManager::downloadTimerCallback):
(WebCore::ResourceHandleManager::initializeHandle):

Location:
trunk/Source/WebCore
Files:
4 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r159430 r159432  
     12013-11-18  Mátyás Mustoha  <mmatyas@inf.u-szeged.hu>
     2
     3        [curl] Add file cache
     4        https://bugs.webkit.org/show_bug.cgi?id=123333
     5
     6        Reviewed by Brent Fulgham.
     7
     8        Implementation of on disc file cache
     9        for the curl network backend.
     10
     11        * WebCore.vcxproj/WebCore.vcxproj:
     12        * WebCore.vcxproj/WebCore.vcxproj.filters:
     13        * platform/network/curl/CurlCacheEntry.cpp: Added.
     14        (WebCore::CurlCacheEntry::CurlCacheEntry):
     15        (WebCore::CurlCacheEntry::~CurlCacheEntry):
     16        (WebCore::CurlCacheEntry::isCached):
     17        (WebCore::CurlCacheEntry::requestHeaders):
     18        (WebCore::CurlCacheEntry::saveCachedData):
     19        (WebCore::CurlCacheEntry::loadCachedData):
     20        (WebCore::CurlCacheEntry::saveResponseHeaders):
     21        (WebCore::CurlCacheEntry::loadResponseHeaders):
     22        (WebCore::CurlCacheEntry::setResponseFromCachedHeaders):
     23        (WebCore::CurlCacheEntry::didFail):
     24        (WebCore::CurlCacheEntry::didFinishLoading):
     25        (WebCore::CurlCacheEntry::generateBaseFilename):
     26        (WebCore::CurlCacheEntry::loadFileToBuffer):
     27        (WebCore::CurlCacheEntry::invalidate):
     28        (WebCore::CurlCacheEntry::parseResponseHeaders):
     29        * platform/network/curl/CurlCacheEntry.h: Added.
     30        (WebCore::CurlCacheEntry::isInMemory):
     31        * platform/network/curl/CurlCacheManager.cpp: Added.
     32        (WebCore::CurlCacheManager::getInstance):
     33        (WebCore::CurlCacheManager::CurlCacheManager):
     34        (WebCore::CurlCacheManager::~CurlCacheManager):
     35        (WebCore::CurlCacheManager::setCacheDirectory):
     36        (WebCore::CurlCacheManager::loadIndex):
     37        (WebCore::CurlCacheManager::saveIndex):
     38        (WebCore::CurlCacheManager::didReceiveResponse):
     39        (WebCore::CurlCacheManager::didFinishLoading):
     40        (WebCore::CurlCacheManager::isCached):
     41        (WebCore::CurlCacheManager::requestHeaders):
     42        (WebCore::CurlCacheManager::didReceiveData):
     43        (WebCore::CurlCacheManager::saveResponseHeaders):
     44        (WebCore::CurlCacheManager::invalidateCacheEntry):
     45        (WebCore::CurlCacheManager::didFail):
     46        (WebCore::CurlCacheManager::loadCachedData):
     47        * platform/network/curl/CurlCacheManager.h: Added.
     48        (WebCore::CurlCacheManager::getCacheDirectory):
     49        * platform/network/curl/ResourceHandleManager.cpp:
     50        (WebCore::writeCallback):
     51        (WebCore::headerCallback):
     52        (WebCore::ResourceHandleManager::downloadTimerCallback):
     53        (WebCore::ResourceHandleManager::initializeHandle):
     54
    1552013-11-18  peavo@outlook.com  <peavo@outlook.com>
    256
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj

    r159386 r159432  
    83168316      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|Win32'">true</ExcludedFromBuild>
    83178317      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|x64'">true</ExcludedFromBuild>
     8318    </ClCompile>
     8319    <ClCompile Include="..\platform\network\curl\CurlCacheEntry.cpp">
     8320      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
     8321      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugSuffix|Win32'">true</ExcludedFromBuild>
     8322      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
     8323      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|Win32'">true</ExcludedFromBuild>
     8324    </ClCompile>
     8325    <ClCompile Include="..\platform\network\curl\CurlCacheManager.cpp">
     8326      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
     8327      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugSuffix|Win32'">true</ExcludedFromBuild>
     8328      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
     8329      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|Win32'">true</ExcludedFromBuild>
    83188330    </ClCompile>
    83198331    <ClCompile Include="..\platform\network\curl\CurlDownload.cpp">
     
    1947419486      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|Win32'">true</ExcludedFromBuild>
    1947519487      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|x64'">true</ExcludedFromBuild>
     19488    </CustomBuildStep>
     19489    <CustomBuildStep Include="..\platform\network\curl\CurlCacheManager.h">
     19490      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
     19491      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugSuffix|Win32'">true</ExcludedFromBuild>
     19492      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
     19493      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|Win32'">true</ExcludedFromBuild>
     19494    </CustomBuildStep>
     19495    <CustomBuildStep Include="..\platform\network\curl\CurlCacheEntry.h">
     19496      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
     19497      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugSuffix|Win32'">true</ExcludedFromBuild>
     19498      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
     19499      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|Win32'">true</ExcludedFromBuild>
    1947619500    </CustomBuildStep>
    1947719501    <CustomBuildStep Include="..\platform\network\curl\FormDataStreamCurl.h">
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters

    r159357 r159432  
    18971897      <Filter>platform\network\curl</Filter>
    18981898    </ClCompile>
     1899    <ClCompile Include="..\platform\network\curl\CurlCacheEntry.cpp">
     1900      <Filter>platform\network\curl</Filter>
     1901    </ClCompile>
     1902    <ClCompile Include="..\platform\network\curl\CurlCacheManager.cpp">
     1903      <Filter>platform\network\curl</Filter>
     1904    </ClCompile>
    18991905    <ClCompile Include="..\platform\network\curl\CurlDownload.cpp">
    19001906      <Filter>platform\network\curl</Filter>
     
    1505715063      <Filter>platform\network\curl</Filter>
    1505815064    </CustomBuildStep>
     15065    <CustomBuildStep Include="..\platform\network\curl\CurlCacheEntry.h">
     15066      <Filter>platform\network\curl</Filter>
     15067    </CustomBuildStep>
     15068    <CustomBuildStep Include="..\platform\network\curl\CurlCacheManager.h">
     15069      <Filter>platform\network\curl</Filter>
     15070    </CustomBuildStep>
    1505915071    <CustomBuildStep Include="..\platform\network\curl\FormDataStreamCurl.h">
    1506015072      <Filter>platform\network\curl</Filter>
  • trunk/Source/WebCore/platform/network/curl/ResourceHandleManager.cpp

    r159053 r159432  
    1010 * Copyright (C) 2013 Peter Gal <galpeter@inf.u-szeged.hu>, University of Szeged
    1111 * Copyright (C) 2013 Alex Christensen <achristensen@webkit.org>
     12 * Copyright (C) 2013 University of Szeged
    1213 * All rights reserved.
    1314 *
     
    3839
    3940#include "CredentialStorage.h"
     41#include "CurlCacheManager.h"
    4042#include "DataURL.h"
    4143#include "HTTPParsers.h"
     
    269271    if (d->m_multipartHandle)
    270272        d->m_multipartHandle->contentReceived(static_cast<const char*>(ptr), totalSize);
    271     else if (d->client())
     273    else if (d->client()) {
    272274        d->client()->didReceiveData(job, static_cast<char*>(ptr), totalSize, 0);
     275        CurlCacheManager::getInstance().didReceiveData(job->firstRequest().url().string(), static_cast<char*>(ptr), totalSize);
     276    }
    273277
    274278    return totalSize;
     
    460464        }
    461465
    462         if (client)
     466        if (client) {
    463467            client->didReceiveResponse(job, d->m_response);
     468            CurlCacheManager::getInstance().didReceiveResponse(job, d->m_response);
     469        }
    464470        d->m_response.setResponseFired(true);
    465471
     
    606612                d->m_multipartHandle->contentEnded();
    607613
    608             if (d->client())
     614            if (d->client()) {
    609615                d->client()->didFinishLoading(job, 0);
     616                CurlCacheManager::getInstance().didFinishLoading(job->firstRequest().url().string());
     617            }
    610618        } else {
    611619            char* url = 0;
     
    614622            fprintf(stderr, "Curl ERROR for url='%s', error: '%s'\n", url, curl_easy_strerror(msg->data.result));
    615623#endif
    616             if (d->client())
     624            if (d->client()) {
    617625                d->client()->didFail(job, ResourceError(String(), msg->data.result, String(url), String(curl_easy_strerror(msg->data.result))));
     626                CurlCacheManager::getInstance().didFail(job->firstRequest().url().string());
     627            }
    618628        }
    619629
     
    970980    if (job->firstRequest().httpHeaderFields().size() > 0) {
    971981        HTTPHeaderMap customHeaders = job->firstRequest().httpHeaderFields();
     982
     983        if (CurlCacheManager::getInstance().isCached(url)) {
     984            HTTPHeaderMap& requestHeaders = CurlCacheManager::getInstance().requestHeaders(url);
     985
     986            // append additional cache information
     987            HTTPHeaderMap::const_iterator it = requestHeaders.begin();
     988            HTTPHeaderMap::const_iterator end = requestHeaders.end();
     989            while (it != end) {
     990                customHeaders.set(it->key, it->value);
     991                ++it;
     992            }
     993        }
     994
    972995        HTTPHeaderMap::const_iterator end = customHeaders.end();
    973996        for (HTTPHeaderMap::const_iterator it = customHeaders.begin(); it != end; ++it) {
Note: See TracChangeset for help on using the changeset viewer.