Changeset 59023 in webkit
- Timestamp:
- May 8, 2010 5:58:37 AM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 1 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r59022 r59023 1 2010-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 1 43 2010-05-08 Michael Nordman <michaeln@google.com> 2 44 -
trunk/WebCore/WebCore.gypi
r59010 r59023 1719 1719 'loader/Cache.cpp', 1720 1720 'loader/Cache.h', 1721 'loader/CachedMetadata.h', 1721 1722 'loader/CachePolicy.h', 1722 1723 'loader/CachedCSSStyleSheet.cpp', -
trunk/WebCore/loader/CachedResource.cpp
r55643 r59023 26 26 27 27 #include "Cache.h" 28 #include "CachedMetadata.h" 28 29 #include "CachedResourceHandle.h" 29 30 #include "DocLoader.h" 30 31 #include "Frame.h" 31 #include "FrameLoader .h"32 #include "FrameLoaderClient.h" 32 33 #include "KURL.h" 33 34 #include "PurgeableBuffer.h" 34 35 #include "Request.h" 36 #include "ResourceHandle.h" 35 37 #include "SharedBuffer.h" 36 38 #include <wtf/CurrentTime.h> … … 163 165 m_response = response; 164 166 m_responseTimestamp = currentTime(); 167 } 168 169 void 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 179 void 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 190 CachedMetadata* CachedResource::cachedMetadata(unsigned dataTypeID) const 191 { 192 if (!m_cachedMetadata || m_cachedMetadata->dataTypeID() != dataTypeID) 193 return 0; 194 return m_cachedMetadata.get(); 165 195 } 166 196 … … 385 415 } 386 416 } 387 417 388 418 bool CachedResource::canUseCacheValidator() const 389 419 { -
trunk/WebCore/loader/CachedResource.h
r55643 r59023 37 37 38 38 class Cache; 39 class CachedMetadata; 39 40 class CachedResourceClient; 40 41 class CachedResourceHandleBase; 41 42 class DocLoader; 43 class Frame; 42 44 class InspectorResource; 43 45 class Request; … … 143 145 const ResourceResponse& response() const { return m_response; } 144 146 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 145 158 bool canDelete() const { return !hasClients() && !m_request && !m_preloadCount && !m_handleCount && !m_resourceToRevalidate && !m_proxyResource; } 146 159 … … 217 230 double freshnessLifetime() const; 218 231 232 RefPtr<CachedMetadata> m_cachedMetadata; 219 233 unsigned m_encodedSize; 220 234 unsigned m_decodedSize; -
trunk/WebCore/loader/ResourceLoader.h
r58442 r59023 81 81 virtual void didReceiveResponse(const ResourceResponse&); 82 82 virtual void didReceiveData(const char*, int, long long lengthReceived, bool allAtOnce); 83 virtual void didReceiveCachedMetadata(const char*, int) { } 83 84 void willStopBufferingData(const char*, int); 84 85 virtual void didFinishLoading(); … … 98 99 virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&); 99 100 virtual void didReceiveData(ResourceHandle*, const char*, int, int lengthReceived); 101 virtual void didReceiveCachedMetadata(ResourceHandle*, const char* data, int length) { didReceiveCachedMetadata(data, length); } 100 102 virtual void didFinishLoading(ResourceHandle*); 101 103 virtual void didFail(ResourceHandle*, const ResourceError&); -
trunk/WebCore/loader/SubresourceLoader.cpp
r52456 r59023 172 172 } 173 173 174 void 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 174 184 void SubresourceLoader::didFinishLoading() 175 185 { -
trunk/WebCore/loader/SubresourceLoader.h
r52456 r59023 52 52 virtual void didReceiveResponse(const ResourceResponse&); 53 53 virtual void didReceiveData(const char*, int, long long lengthReceived, bool allAtOnce); 54 virtual void didReceiveCachedMetadata(const char*, int); 54 55 virtual void didFinishLoading(); 55 56 virtual void didFail(const ResourceError&); -
trunk/WebCore/loader/SubresourceLoaderClient.h
r50625 r59023 48 48 virtual void didReceiveResponse(SubresourceLoader*, const ResourceResponse&) { } 49 49 virtual void didReceiveData(SubresourceLoader*, const char*, int /*lengthReceived*/) { } 50 virtual void didReceiveCachedMetadata(SubresourceLoader*, const char*, int /*lengthReceived*/) { } 50 51 virtual void didFinishLoading(SubresourceLoader*) { } 51 52 virtual void didFail(SubresourceLoader*, const ResourceError&) { } -
trunk/WebCore/loader/loader.cpp
r56825 r59023 552 552 } 553 553 554 void 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 554 568 void Loader::Host::cancelPendingRequests(RequestQueue& requestsPending, DocLoader* docLoader) 555 569 { -
trunk/WebCore/loader/loader.h
r52177 r59023 88 88 virtual void didReceiveResponse(SubresourceLoader*, const ResourceResponse&); 89 89 virtual void didReceiveData(SubresourceLoader*, const char*, int); 90 virtual void didReceiveCachedMetadata(SubresourceLoader*, const char*, int); 90 91 virtual void didFinishLoading(SubresourceLoader*); 91 92 virtual void didFail(SubresourceLoader*, const ResourceError&); -
trunk/WebCore/platform/network/ResourceHandle.cpp
r56128 r59023 146 146 #endif 147 147 148 void ResourceHandle::cacheMetadata(const ResourceResponse&, const Vector<char>&) 149 { 150 // Optionally implemented by platform. 151 } 152 148 153 } // namespace WebCore -
trunk/WebCore/platform/network/ResourceHandle.h
r58442 r59023 114 114 static void prepareForURL(const KURL&); 115 115 static bool willLoadFromCache(ResourceRequest&, Frame*); 116 static void cacheMetadata(const ResourceResponse&, const Vector<char>&); 116 117 #if PLATFORM(MAC) 117 118 static bool didSendBodyDataDelegateExists(); -
trunk/WebCore/platform/network/ResourceHandleClient.h
r58442 r59023 70 70 virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&) { } 71 71 virtual void didReceiveData(ResourceHandle*, const char*, int, int /*lengthReceived*/) { } 72 virtual void didReceiveCachedMetadata(ResourceHandle*, const char*, int) { } 72 73 virtual void didFinishLoading(ResourceHandle*) { } 73 74 virtual void didFail(ResourceHandle*, const ResourceError&) { }
Note: See TracChangeset
for help on using the changeset viewer.