Chromium Code Reviews| Index: Source/core/fetch/Resource.cpp |
| diff --git a/Source/core/fetch/Resource.cpp b/Source/core/fetch/Resource.cpp |
| index 34d307d1c78f046a2526726fa3fa9ba79dd47ebb..555524b57f3493d7ab1407645068a9d6a1ea2798 100644 |
| --- a/Source/core/fetch/Resource.cpp |
| +++ b/Source/core/fetch/Resource.cpp |
| @@ -96,6 +96,48 @@ static inline bool shouldUpdateHeaderAfterRevalidation(const AtomicString& heade |
| DEFINE_DEBUG_ONLY_GLOBAL(RefCountedLeakCounter, cachedResourceLeakCounter, ("Resource")); |
| unsigned Resource::s_instanceCount = 0; |
| +class Resource::CacheHandler : public CachedMetadataHandler { |
| +public: |
| + static PassOwnPtr<CacheHandler> create(Resource* resource) |
| + { |
| + return adoptPtr(new CacheHandler(resource)); |
| + } |
| + ~CacheHandler() override { } |
| + void setCachedMetadata(unsigned, const char*, size_t, CacheType) override; |
| + void clearCachedMetadata(CacheType) override; |
| + CachedMetadata* cachedMetadata(unsigned) const override; |
| + String encoding() const override; |
| + |
| +private: |
| + explicit CacheHandler(Resource*); |
| + Resource* m_resource; |
| +}; |
| + |
| +Resource::CacheHandler::CacheHandler(Resource* resource) |
| + : m_resource(resource) |
| +{ |
| +} |
| + |
| +void Resource::CacheHandler::setCachedMetadata(unsigned dataTypeID, const char* data, size_t size, CacheType type) |
| +{ |
| + m_resource->setCachedMetadata(dataTypeID, data, size, type); |
| +} |
| + |
| +void Resource::CacheHandler::clearCachedMetadata(CacheType type) |
| +{ |
| + m_resource->clearCachedMetadata(type); |
| +} |
| + |
| +CachedMetadata* Resource::CacheHandler::cachedMetadata(unsigned dataTypeID) const |
| +{ |
| + return m_resource->cachedMetadata(dataTypeID); |
| +} |
| + |
| +String Resource::CacheHandler::encoding() const |
| +{ |
| + return m_resource->encoding(); |
| +} |
| + |
| Resource::Resource(const ResourceRequest& request, Type type) |
| : m_resourceRequest(request) |
| , m_responseTimestamp(currentTime()) |
| @@ -136,6 +178,9 @@ Resource::Resource(const ResourceRequest& request, Type type) |
| return; |
| m_fragmentIdentifierForRequest = m_resourceRequest.url().fragmentIdentifier(); |
| m_resourceRequest.setURL(urlForCache); |
| + |
| + if (url().protocolIsInHTTPFamily()) |
|
vogelheim
2015/02/16 17:29:50
nitpick: This is exactly right, but maybe add a 1
horo
2015/02/16 17:54:26
Done.
|
| + m_cacheHandler = CacheHandler::create(this); |
| } |
| Resource::~Resource() |
| @@ -420,7 +465,12 @@ void Resource::setSerializedCachedMetadata(const char* data, size_t size) |
| m_cachedMetadata = CachedMetadata::deserialize(data, size); |
| } |
| -void Resource::setCachedMetadata(unsigned dataTypeID, const char* data, size_t size, MetadataCacheType cacheType) |
| +CachedMetadataHandler* Resource::cacheHandler() |
| +{ |
| + return m_cacheHandler.get(); |
| +} |
| + |
| +void Resource::setCachedMetadata(unsigned dataTypeID, const char* data, size_t size, CachedMetadataHandler::CacheType cacheType) |
| { |
| // Currently, only one type of cached metadata per resource is supported. |
| // If the need arises for multiple types of metadata per resource this could |
| @@ -434,17 +484,17 @@ void Resource::setCachedMetadata(unsigned dataTypeID, const char* data, size_t s |
| // from poisoning the metadata cache. |
| // FIXME: Support sending the metadata even if the response was fetched via |
| // a ServiceWorker. https://crbug.com/448706 |
| - if (cacheType == SendToPlatform && !m_response.wasFetchedViaServiceWorker()) { |
| + if (cacheType == CachedMetadataHandler::SendToPlatform && !m_response.wasFetchedViaServiceWorker()) { |
| const Vector<char>& serializedData = m_cachedMetadata->serialize(); |
| blink::Platform::current()->cacheMetadata(m_response.url(), m_response.responseTime(), serializedData.data(), serializedData.size()); |
| } |
| } |
| -void Resource::clearCachedMetadata(MetadataCacheType cacheType) |
| +void Resource::clearCachedMetadata(CachedMetadataHandler::CacheType cacheType) |
| { |
| m_cachedMetadata.clear(); |
| - if (cacheType == SendToPlatform) |
| + if (cacheType == CachedMetadataHandler::SendToPlatform) |
| blink::Platform::current()->cacheMetadata(m_response.url(), m_response.responseTime(), 0, 0); |
| } |