Changeset 59023 in webkit


Ignore:
Timestamp:
May 8, 2010 5:58:37 AM (14 years ago)
Author:
eric@webkit.org
Message:

2010-05-08 Tony Gentilcore <tonyg@chromium.org>

Reviewed by Darin Fisher.

Provide mechanism to store cached metadata on a CachedResource.
https://bugs.webkit.org/show_bug.cgi?id=37874

No new tests because no new functionality.

  • WebCore.gypi:
  • loader/CachedMetadata.h: Added. (WebCore::CachedMetadata::~CachedMetadata): (WebCore::CachedMetadata::data): (WebCore::CachedMetadata::size): (WebCore::CachedMetadata::create): (WebCore::CachedMetadata::deserialize): (WebCore::CachedMetadata::serialize): (WebCore::CachedMetadata::dataTypeID): (WebCore::CachedMetadata::readUnsigned): (WebCore::CachedMetadata::appendUnsigned): (WebCore::CachedMetadata::CachedMetadata):
  • loader/CachedResource.cpp: (WebCore::CachedResource::setSerializedCachedMetadata): (WebCore::CachedResource::setCachedMetadata): (WebCore::CachedResource::cachedMetadata):
  • loader/CachedResource.h:
  • loader/ResourceLoader.h: (WebCore::ResourceLoader::didReceiveCachedMetadata):
  • loader/SubresourceLoader.cpp: (WebCore::SubresourceLoader::didReceiveCachedMetadata):
  • loader/SubresourceLoader.h:
  • loader/SubresourceLoaderClient.h: (WebCore::SubresourceLoaderClient::didReceiveCachedMetadata):
  • loader/loader.cpp: (WebCore::Loader::Host::didReceiveCachedMetadata):
  • loader/loader.h:
  • platform/network/ResourceHandle.cpp: (WebCore::ResourceHandle::cacheMetadata):
  • platform/network/ResourceHandle.h:
  • platform/network/ResourceHandleClient.h: (WebCore::ResourceHandleClient::didReceiveCachedMetadata):
Location:
trunk/WebCore
Files:
1 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r59022 r59023  
     12010-05-08  Tony Gentilcore  <tonyg@chromium.org>
     2
     3        Reviewed by Darin Fisher.
     4
     5        Provide mechanism to store cached metadata on a CachedResource.
     6        https://bugs.webkit.org/show_bug.cgi?id=37874
     7
     8        No new tests because no new functionality.
     9
     10        * WebCore.gypi:
     11        * loader/CachedMetadata.h: Added.
     12        (WebCore::CachedMetadata::~CachedMetadata):
     13        (WebCore::CachedMetadata::data):
     14        (WebCore::CachedMetadata::size):
     15        (WebCore::CachedMetadata::create):
     16        (WebCore::CachedMetadata::deserialize):
     17        (WebCore::CachedMetadata::serialize):
     18        (WebCore::CachedMetadata::dataTypeID):
     19        (WebCore::CachedMetadata::readUnsigned):
     20        (WebCore::CachedMetadata::appendUnsigned):
     21        (WebCore::CachedMetadata::CachedMetadata):
     22        * loader/CachedResource.cpp:
     23        (WebCore::CachedResource::setSerializedCachedMetadata):
     24        (WebCore::CachedResource::setCachedMetadata):
     25        (WebCore::CachedResource::cachedMetadata):
     26        * loader/CachedResource.h:
     27        * loader/ResourceLoader.h:
     28        (WebCore::ResourceLoader::didReceiveCachedMetadata):
     29        * loader/SubresourceLoader.cpp:
     30        (WebCore::SubresourceLoader::didReceiveCachedMetadata):
     31        * loader/SubresourceLoader.h:
     32        * loader/SubresourceLoaderClient.h:
     33        (WebCore::SubresourceLoaderClient::didReceiveCachedMetadata):
     34        * loader/loader.cpp:
     35        (WebCore::Loader::Host::didReceiveCachedMetadata):
     36        * loader/loader.h:
     37        * platform/network/ResourceHandle.cpp:
     38        (WebCore::ResourceHandle::cacheMetadata):
     39        * platform/network/ResourceHandle.h:
     40        * platform/network/ResourceHandleClient.h:
     41        (WebCore::ResourceHandleClient::didReceiveCachedMetadata):
     42
    1432010-05-08  Michael Nordman  <michaeln@google.com>
    244
  • trunk/WebCore/WebCore.gypi

    r59010 r59023  
    17191719            'loader/Cache.cpp',
    17201720            'loader/Cache.h',
     1721            'loader/CachedMetadata.h',
    17211722            'loader/CachePolicy.h',
    17221723            'loader/CachedCSSStyleSheet.cpp',
  • trunk/WebCore/loader/CachedResource.cpp

    r55643 r59023  
    2626
    2727#include "Cache.h"
     28#include "CachedMetadata.h"
    2829#include "CachedResourceHandle.h"
    2930#include "DocLoader.h"
    3031#include "Frame.h"
    31 #include "FrameLoader.h"
     32#include "FrameLoaderClient.h"
    3233#include "KURL.h"
    3334#include "PurgeableBuffer.h"
    3435#include "Request.h"
     36#include "ResourceHandle.h"
    3537#include "SharedBuffer.h"
    3638#include <wtf/CurrentTime.h>
     
    163165    m_response = response;
    164166    m_responseTimestamp = currentTime();
     167}
     168
     169void CachedResource::setSerializedCachedMetadata(const char* data, size_t size)
     170{
     171    // We only expect to receive cached metadata from the platform once.
     172    // If this triggers, it indicates an efficiency problem which is most
     173    // likely unexpected in code designed to improve performance.
     174    ASSERT(!m_cachedMetadata);
     175
     176    m_cachedMetadata = CachedMetadata::deserialize(data, size);
     177}
     178
     179void CachedResource::setCachedMetadata(unsigned dataTypeID, const char* data, size_t size)
     180{
     181    // Currently, only one type of cached metadata per resource is supported.
     182    // If the need arises for multiple types of metadata per resource this could
     183    // be enhanced to store types of metadata in a map.
     184    ASSERT(!m_cachedMetadata);
     185
     186    m_cachedMetadata = CachedMetadata::create(dataTypeID, data, size);
     187    ResourceHandle::cacheMetadata(m_response, m_cachedMetadata->serialize());
     188}
     189
     190CachedMetadata* CachedResource::cachedMetadata(unsigned dataTypeID) const
     191{
     192    if (!m_cachedMetadata || m_cachedMetadata->dataTypeID() != dataTypeID)
     193        return 0;
     194    return m_cachedMetadata.get();
    165195}
    166196
     
    385415    }
    386416}
    387    
     417
    388418bool CachedResource::canUseCacheValidator() const
    389419{
  • trunk/WebCore/loader/CachedResource.h

    r55643 r59023  
    3737
    3838class Cache;
     39class CachedMetadata;
    3940class CachedResourceClient;
    4041class CachedResourceHandleBase;
    4142class DocLoader;
     43class Frame;
    4244class InspectorResource;
    4345class Request;
     
    143145    const ResourceResponse& response() const { return m_response; }
    144146
     147    // Sets the serialized metadata retrieved from the platform's cache.
     148    void setSerializedCachedMetadata(const char*, size_t);
     149
     150    // Caches the given metadata in association with this resource and suggests
     151    // that the platform persist it. The dataTypeID is a pseudo-randomly chosen
     152    // identifier that is used to distinguish data generated by the caller.
     153    void setCachedMetadata(unsigned dataTypeID, const char*, size_t);
     154
     155    // Returns cached metadata of the given type associated with this resource.
     156    CachedMetadata* cachedMetadata(unsigned dataTypeID) const;
     157
    145158    bool canDelete() const { return !hasClients() && !m_request && !m_preloadCount && !m_handleCount && !m_resourceToRevalidate && !m_proxyResource; }
    146159
     
    217230    double freshnessLifetime() const;
    218231
     232    RefPtr<CachedMetadata> m_cachedMetadata;
    219233    unsigned m_encodedSize;
    220234    unsigned m_decodedSize;
  • trunk/WebCore/loader/ResourceLoader.h

    r58442 r59023  
    8181        virtual void didReceiveResponse(const ResourceResponse&);
    8282        virtual void didReceiveData(const char*, int, long long lengthReceived, bool allAtOnce);
     83        virtual void didReceiveCachedMetadata(const char*, int) { }
    8384        void willStopBufferingData(const char*, int);
    8485        virtual void didFinishLoading();
     
    9899        virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&);
    99100        virtual void didReceiveData(ResourceHandle*, const char*, int, int lengthReceived);
     101        virtual void didReceiveCachedMetadata(ResourceHandle*, const char* data, int length) { didReceiveCachedMetadata(data, length); }
    100102        virtual void didFinishLoading(ResourceHandle*);
    101103        virtual void didFail(ResourceHandle*, const ResourceError&);
  • trunk/WebCore/loader/SubresourceLoader.cpp

    r52456 r59023  
    172172}
    173173
     174void SubresourceLoader::didReceiveCachedMetadata(const char* data, int length)
     175{
     176    // Reference the object in this method since the additional processing can do
     177    // anything including removing the last reference to this object; one example of this is 3266216.
     178    RefPtr<SubresourceLoader> protect(this);
     179   
     180    if (m_client)
     181        m_client->didReceiveCachedMetadata(this, data, length);
     182}
     183
    174184void SubresourceLoader::didFinishLoading()
    175185{
  • trunk/WebCore/loader/SubresourceLoader.h

    r52456 r59023  
    5252        virtual void didReceiveResponse(const ResourceResponse&);
    5353        virtual void didReceiveData(const char*, int, long long lengthReceived, bool allAtOnce);
     54        virtual void didReceiveCachedMetadata(const char*, int);
    5455        virtual void didFinishLoading();
    5556        virtual void didFail(const ResourceError&);
  • trunk/WebCore/loader/SubresourceLoaderClient.h

    r50625 r59023  
    4848    virtual void didReceiveResponse(SubresourceLoader*, const ResourceResponse&) { }
    4949    virtual void didReceiveData(SubresourceLoader*, const char*, int /*lengthReceived*/) { }
     50    virtual void didReceiveCachedMetadata(SubresourceLoader*, const char*, int /*lengthReceived*/) { }
    5051    virtual void didFinishLoading(SubresourceLoader*) { }
    5152    virtual void didFail(SubresourceLoader*, const ResourceError&) { }
  • trunk/WebCore/loader/loader.cpp

    r56825 r59023  
    552552}
    553553   
     554void Loader::Host::didReceiveCachedMetadata(SubresourceLoader* loader, const char* data, int size)
     555{
     556    RefPtr<Host> protector(this);
     557
     558    Request* request = m_requestsLoading.get(loader);
     559    if (!request)
     560        return;
     561
     562    CachedResource* resource = request->cachedResource();   
     563    ASSERT(!resource->isCacheValidator());
     564
     565    resource->setSerializedCachedMetadata(data, size);
     566}
     567   
    554568void Loader::Host::cancelPendingRequests(RequestQueue& requestsPending, DocLoader* docLoader)
    555569{
  • trunk/WebCore/loader/loader.h

    r52177 r59023  
    8888            virtual void didReceiveResponse(SubresourceLoader*, const ResourceResponse&);
    8989            virtual void didReceiveData(SubresourceLoader*, const char*, int);
     90            virtual void didReceiveCachedMetadata(SubresourceLoader*, const char*, int);
    9091            virtual void didFinishLoading(SubresourceLoader*);
    9192            virtual void didFail(SubresourceLoader*, const ResourceError&);
  • trunk/WebCore/platform/network/ResourceHandle.cpp

    r56128 r59023  
    146146#endif
    147147
     148void ResourceHandle::cacheMetadata(const ResourceResponse&, const Vector<char>&)
     149{
     150    // Optionally implemented by platform.
     151}
     152
    148153} // namespace WebCore
  • trunk/WebCore/platform/network/ResourceHandle.h

    r58442 r59023  
    114114    static void prepareForURL(const KURL&);
    115115    static bool willLoadFromCache(ResourceRequest&, Frame*);
     116    static void cacheMetadata(const ResourceResponse&, const Vector<char>&);
    116117#if PLATFORM(MAC)
    117118    static bool didSendBodyDataDelegateExists();
  • trunk/WebCore/platform/network/ResourceHandleClient.h

    r58442 r59023  
    7070        virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&) { }
    7171        virtual void didReceiveData(ResourceHandle*, const char*, int, int /*lengthReceived*/) { }
     72        virtual void didReceiveCachedMetadata(ResourceHandle*, const char*, int) { }
    7273        virtual void didFinishLoading(ResourceHandle*) { }
    7374        virtual void didFail(ResourceHandle*, const ResourceError&) { }
Note: See TracChangeset for help on using the changeset viewer.