| Index: third_party/WebKit/Source/core/fetch/Resource.cpp
|
| diff --git a/third_party/WebKit/Source/core/fetch/Resource.cpp b/third_party/WebKit/Source/core/fetch/Resource.cpp
|
| index 50c6fed7a8020ca05270af05b5652ff6fdb0f03d..05f46b187c33a1feb9a5b392900752ef70036cd9 100644
|
| --- a/third_party/WebKit/Source/core/fetch/Resource.cpp
|
| +++ b/third_party/WebKit/Source/core/fetch/Resource.cpp
|
| @@ -41,6 +41,7 @@
|
| #include "public/platform/Platform.h"
|
| #include "public/platform/WebProcessMemoryDump.h"
|
| #include "public/platform/WebScheduler.h"
|
| +#include "public/platform/WebSecurityOrigin.h"
|
| #include "wtf/CurrentTime.h"
|
| #include "wtf/MathExtras.h"
|
| #include "wtf/StdLibExtras.h"
|
| @@ -105,6 +106,7 @@ public:
|
| void clearCachedMetadata(CacheType) override;
|
| CachedMetadata* cachedMetadata(unsigned) const override;
|
| String encoding() const override;
|
| + bool shouldAggressivelyCache() const override;
|
|
|
| private:
|
| explicit CacheHandler(Resource*);
|
| @@ -142,6 +144,11 @@ String Resource::CacheHandler::encoding() const
|
| return m_resource->encoding();
|
| }
|
|
|
| +bool Resource::CacheHandler::shouldAggressivelyCache() const
|
| +{
|
| + return m_resource->shouldAggressivelyCacheMetadata();
|
| +}
|
| +
|
| class Resource::ResourceCallback final : public GarbageCollectedFinalized<ResourceCallback> {
|
| public:
|
| static ResourceCallback& callbackHandler();
|
| @@ -266,6 +273,7 @@ void Resource::load(ResourceFetcher* fetcher)
|
| KURL url = request.url();
|
| request.setAllowStoredCredentials(m_options.allowCredentials == AllowStoredCredentials);
|
|
|
| + m_fetcherSecurityOrigin = fetcher->context().getSecurityOrigin();
|
| m_loader = ResourceLoader::create(fetcher, this);
|
| m_loader->start(request);
|
| // If the request reference is null (i.e., a synchronous revalidation will
|
| @@ -534,9 +542,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 == CachedMetadataHandler::SendToPlatform && !m_response.wasFetchedViaServiceWorker()) {
|
| - const Vector<char>& serializedData = m_cachedMetadata->serialize();
|
| - Platform::current()->cacheMetadata(m_response.url(), m_response.responseTime(), serializedData.data(), serializedData.size());
|
| + if (cacheType == CachedMetadataHandler::SendToPlatform) {
|
| + if (cacheMetadataSendToPlatformDisabled())
|
| + return;
|
| +
|
| + if (!m_response.wasFetchedViaServiceWorker()) {
|
| + const Vector<char>& serializedData = m_cachedMetadata->serialize();
|
| + Platform::current()->cacheMetadata(m_response.url(), m_response.responseTime(), serializedData.data(), serializedData.size());
|
| + } else if (!m_response.cacheStorageCacheName().isNull()) {
|
| + const Vector<char>& serializedData = m_cachedMetadata->serialize();
|
| + Platform::current()->cacheMetadataInCacheStorage(m_response.url(), m_response.responseTime(), serializedData.data(), serializedData.size(), WebSecurityOrigin(m_fetcherSecurityOrigin), m_response.cacheStorageCacheName());
|
| + }
|
| }
|
| }
|
|
|
| @@ -544,8 +560,13 @@ void Resource::clearCachedMetadata(CachedMetadataHandler::CacheType cacheType)
|
| {
|
| m_cachedMetadata.clear();
|
|
|
| - if (cacheType == CachedMetadataHandler::SendToPlatform)
|
| - Platform::current()->cacheMetadata(m_response.url(), m_response.responseTime(), 0, 0);
|
| + if (cacheType == CachedMetadataHandler::SendToPlatform) {
|
| + if (!m_response.wasFetchedViaServiceWorker()) {
|
| + Platform::current()->cacheMetadata(m_response.url(), m_response.responseTime(), 0, 0);
|
| + } else if (!m_response.cacheStorageCacheName().isNull()) {
|
| + Platform::current()->cacheMetadataInCacheStorage(m_response.url(), m_response.responseTime(), 0, 0, WebSecurityOrigin(m_fetcherSecurityOrigin), m_response.cacheStorageCacheName());
|
| + }
|
| + }
|
| }
|
|
|
| String Resource::reasonNotDeletable() const
|
|
|