Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(781)

Unified Diff: Source/core/fetch/Resource.cpp

Issue 929953002: CachedMetadata support for ServiceWorker script. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: incorporated tkent's comment Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/fetch/Resource.h ('k') | Source/core/fetch/ResourceTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/fetch/Resource.cpp
diff --git a/Source/core/fetch/Resource.cpp b/Source/core/fetch/Resource.cpp
index 34d307d1c78f046a2526726fa3fa9ba79dd47ebb..6352a96d177fb45b7ab218bc80394938992cae2c 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())
@@ -129,6 +171,10 @@ Resource::Resource(const ResourceRequest& request, Type type)
#endif
memoryCache()->registerLiveResource(*this);
+ // Currently we support the metadata caching only for HTTP family.
+ if (m_resourceRequest.url().protocolIsInHTTPFamily())
+ m_cacheHandler = CacheHandler::create(this);
+
if (!m_resourceRequest.url().hasFragmentIdentifier())
return;
KURL urlForCache = MemoryCache::removeFragmentIdentifierIfNeeded(m_resourceRequest.url());
@@ -420,7 +466,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 +485,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);
}
« no previous file with comments | « Source/core/fetch/Resource.h ('k') | Source/core/fetch/ResourceTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698