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 c582f1ee2d347ce4427ff2c2fd6ae31a6dc03b62..e8f1cb7c3fd42e76b9800e93b2483b28e9cbd73f 100644 |
--- a/third_party/WebKit/Source/core/fetch/Resource.cpp |
+++ b/third_party/WebKit/Source/core/fetch/Resource.cpp |
@@ -104,7 +104,7 @@ public: |
DECLARE_VIRTUAL_TRACE(); |
void setCachedMetadata(unsigned, const char*, size_t, CacheType) override; |
void clearCachedMetadata(CacheType) override; |
- CachedMetadata* cachedMetadata(unsigned) const override; |
+ PassRefPtr<CachedMetadata> cachedMetadata(unsigned) const override; |
String encoding() const override; |
// Sets the serialized metadata retrieved from the platform's cache. |
void setSerializedCachedMetadata(const char*, size_t); |
@@ -149,7 +149,7 @@ void Resource::CachedMetadataHandlerImpl::clearCachedMetadata(CachedMetadataHand |
sendToPlatform(); |
} |
-CachedMetadata* Resource::CachedMetadataHandlerImpl::cachedMetadata(unsigned dataTypeID) const |
+PassRefPtr<CachedMetadata> Resource::CachedMetadataHandlerImpl::cachedMetadata(unsigned dataTypeID) const |
{ |
if (!m_cachedMetadata || m_cachedMetadata->dataTypeID() != dataTypeID) |
return nullptr; |
@@ -319,6 +319,7 @@ Resource::Resource(const ResourceRequest& request, Type type, const ResourceLoad |
// Currently we support the metadata caching only for HTTP family. |
if (m_resourceRequest.url().protocolIsInHTTPFamily()) |
m_cacheHandler = CachedMetadataHandlerImpl::create(this); |
+ MemoryCoordinator::instance().registerClient(this); |
} |
Resource::~Resource() |
@@ -330,6 +331,7 @@ DEFINE_TRACE(Resource) |
{ |
visitor->trace(m_loader); |
visitor->trace(m_cacheHandler); |
+ MemoryCoordinatorClient::trace(visitor); |
} |
void Resource::setLoader(ResourceLoader* loader) |
@@ -810,6 +812,14 @@ void Resource::prune() |
destroyDecodedDataIfPossible(); |
} |
+void Resource::prepareToSuspend() |
+{ |
+ prune(); |
+ if (!m_cacheHandler) |
+ return; |
+ m_cacheHandler->clearCachedMetadata(CachedMetadataHandler::CacheLocally); |
+} |
+ |
void Resource::onMemoryDump(WebMemoryDumpLevelOfDetail levelOfDetail, WebProcessMemoryDump* memoryDump) const |
{ |
static const size_t kMaxURLReportLength = 128; |