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

Side by Side 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 vivekg'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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de)
3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org)
4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org)
5 Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) 5 Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
6 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 6 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
7 7
8 This library is free software; you can redistribute it and/or 8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public 9 modify it under the terms of the GNU Library General Public
10 License as published by the Free Software Foundation; either 10 License as published by the Free Software Foundation; either
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 for (size_t i = 0; i < WTF_ARRAY_LENGTH(headerPrefixesToIgnoreAfterRevalidat ion); i++) { 89 for (size_t i = 0; i < WTF_ARRAY_LENGTH(headerPrefixesToIgnoreAfterRevalidat ion); i++) {
90 if (header.startsWith(headerPrefixesToIgnoreAfterRevalidation[i], false) ) 90 if (header.startsWith(headerPrefixesToIgnoreAfterRevalidation[i], false) )
91 return false; 91 return false;
92 } 92 }
93 return true; 93 return true;
94 } 94 }
95 95
96 DEFINE_DEBUG_ONLY_GLOBAL(RefCountedLeakCounter, cachedResourceLeakCounter, ("Res ource")); 96 DEFINE_DEBUG_ONLY_GLOBAL(RefCountedLeakCounter, cachedResourceLeakCounter, ("Res ource"));
97 unsigned Resource::s_instanceCount = 0; 97 unsigned Resource::s_instanceCount = 0;
98 98
99 Resource::CacheHandler::CacheHandler(Resource* resource)
100 : m_resource(resource)
101 {
102 }
103
104 void Resource::CacheHandler::setCachedMetadata(unsigned dataTypeID, const char* data, size_t size, CacheType type)
105 {
106 m_resource->setCachedMetadata(dataTypeID, data, size, type);
107 }
108
109 void Resource::CacheHandler::clearCachedMetadata(CacheType type)
110 {
111 m_resource->clearCachedMetadata(type);
112 }
113
114 CachedMetadata* Resource::CacheHandler::cachedMetadata(unsigned dataTypeID) cons t
115 {
116 return m_resource->cachedMetadata(dataTypeID);
117 }
118
119 String Resource::CacheHandler::encoding() const
120 {
121 return m_resource->encoding();
122 }
123
124
99 Resource::Resource(const ResourceRequest& request, Type type) 125 Resource::Resource(const ResourceRequest& request, Type type)
100 : m_resourceRequest(request) 126 : m_resourceRequest(request)
101 , m_responseTimestamp(currentTime()) 127 , m_responseTimestamp(currentTime())
102 , m_cancelTimer(this, &Resource::cancelTimerFired) 128 , m_cancelTimer(this, &Resource::cancelTimerFired)
129 , m_cacheHandler(this)
103 , m_loadFinishTime(0) 130 , m_loadFinishTime(0)
104 , m_identifier(0) 131 , m_identifier(0)
105 , m_encodedSize(0) 132 , m_encodedSize(0)
106 , m_decodedSize(0) 133 , m_decodedSize(0)
107 , m_handleCount(0) 134 , m_handleCount(0)
108 , m_preloadCount(0) 135 , m_preloadCount(0)
109 , m_protectorCount(0) 136 , m_protectorCount(0)
110 , m_cacheIdentifier(MemoryCache::defaultCacheIdentifier()) 137 , m_cacheIdentifier(MemoryCache::defaultCacheIdentifier())
111 , m_preloadResult(PreloadNotReferenced) 138 , m_preloadResult(PreloadNotReferenced)
112 , m_requestedFromNetworkingLayer(false) 139 , m_requestedFromNetworkingLayer(false)
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 { 440 {
414 // We only expect to receive cached metadata from the platform once. 441 // We only expect to receive cached metadata from the platform once.
415 // If this triggers, it indicates an efficiency problem which is most 442 // If this triggers, it indicates an efficiency problem which is most
416 // likely unexpected in code designed to improve performance. 443 // likely unexpected in code designed to improve performance.
417 ASSERT(!m_cachedMetadata); 444 ASSERT(!m_cachedMetadata);
418 ASSERT(!m_resourceToRevalidate); 445 ASSERT(!m_resourceToRevalidate);
419 446
420 m_cachedMetadata = CachedMetadata::deserialize(data, size); 447 m_cachedMetadata = CachedMetadata::deserialize(data, size);
421 } 448 }
422 449
423 void Resource::setCachedMetadata(unsigned dataTypeID, const char* data, size_t s ize, MetadataCacheType cacheType) 450 CachedMetadataHandler* Resource::cacheHandler()
451 {
452 return &m_cacheHandler;
vogelheim 2015/02/16 13:12:04 This might not be correct: Not all Resources are c
horo 2015/02/16 16:20:11 Done.
453 }
454
455 void Resource::setCachedMetadata(unsigned dataTypeID, const char* data, size_t s ize, CachedMetadataHandler::CacheType cacheType)
424 { 456 {
425 // Currently, only one type of cached metadata per resource is supported. 457 // Currently, only one type of cached metadata per resource is supported.
426 // If the need arises for multiple types of metadata per resource this could 458 // If the need arises for multiple types of metadata per resource this could
427 // be enhanced to store types of metadata in a map. 459 // be enhanced to store types of metadata in a map.
428 ASSERT(!m_cachedMetadata); 460 ASSERT(!m_cachedMetadata);
429 461
430 m_cachedMetadata = CachedMetadata::create(dataTypeID, data, size); 462 m_cachedMetadata = CachedMetadata::create(dataTypeID, data, size);
431 463
432 // We don't support sending the metadata to the platform when the response 464 // We don't support sending the metadata to the platform when the response
433 // was fetched via a ServiceWorker to prevent an attacker's Service Worker 465 // was fetched via a ServiceWorker to prevent an attacker's Service Worker
434 // from poisoning the metadata cache. 466 // from poisoning the metadata cache.
435 // FIXME: Support sending the metadata even if the response was fetched via 467 // FIXME: Support sending the metadata even if the response was fetched via
436 // a ServiceWorker. https://crbug.com/448706 468 // a ServiceWorker. https://crbug.com/448706
437 if (cacheType == SendToPlatform && !m_response.wasFetchedViaServiceWorker()) { 469 if (cacheType == CachedMetadataHandler::SendToPlatform && !m_response.wasFet chedViaServiceWorker()) {
438 const Vector<char>& serializedData = m_cachedMetadata->serialize(); 470 const Vector<char>& serializedData = m_cachedMetadata->serialize();
439 blink::Platform::current()->cacheMetadata(m_response.url(), m_response.r esponseTime(), serializedData.data(), serializedData.size()); 471 blink::Platform::current()->cacheMetadata(m_response.url(), m_response.r esponseTime(), serializedData.data(), serializedData.size());
440 } 472 }
441 } 473 }
442 474
443 void Resource::clearCachedMetadata(MetadataCacheType cacheType) 475 void Resource::clearCachedMetadata(CachedMetadataHandler::CacheType cacheType)
444 { 476 {
445 m_cachedMetadata.clear(); 477 m_cachedMetadata.clear();
446 478
447 if (cacheType == SendToPlatform) 479 if (cacheType == CachedMetadataHandler::SendToPlatform)
448 blink::Platform::current()->cacheMetadata(m_response.url(), m_response.r esponseTime(), 0, 0); 480 blink::Platform::current()->cacheMetadata(m_response.url(), m_response.r esponseTime(), 0, 0);
449 } 481 }
450 482
451 bool Resource::canDelete() const 483 bool Resource::canDelete() const
452 { 484 {
453 return !hasClients() && !m_loader && !m_preloadCount && hasRightHandleCountA partFromCache(0) 485 return !hasClients() && !m_loader && !m_preloadCount && hasRightHandleCountA partFromCache(0)
454 && !m_protectorCount && !m_resourceToRevalidate && !m_proxyResource; 486 && !m_protectorCount && !m_resourceToRevalidate && !m_proxyResource;
455 } 487 }
456 488
457 bool Resource::hasOneHandle() const 489 bool Resource::hasOneHandle() const
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after
1022 return "ImportResource"; 1054 return "ImportResource";
1023 case Resource::Media: 1055 case Resource::Media:
1024 return "Media"; 1056 return "Media";
1025 } 1057 }
1026 ASSERT_NOT_REACHED(); 1058 ASSERT_NOT_REACHED();
1027 return "Unknown"; 1059 return "Unknown";
1028 } 1060 }
1029 #endif // !LOG_DISABLED 1061 #endif // !LOG_DISABLED
1030 1062
1031 } 1063 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698