| Index: third_party/WebKit/Source/core/fetch/Resource.h
|
| diff --git a/third_party/WebKit/Source/core/fetch/Resource.h b/third_party/WebKit/Source/core/fetch/Resource.h
|
| deleted file mode 100644
|
| index 36c8eefe47767bd3a5e9736d003ab1dcd2cbc47c..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/core/fetch/Resource.h
|
| +++ /dev/null
|
| @@ -1,519 +0,0 @@
|
| -/*
|
| - Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de)
|
| - Copyright (C) 2001 Dirk Mueller <mueller@kde.org>
|
| - Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
|
| - Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
|
| - rights reserved.
|
| -
|
| - This library is free software; you can redistribute it and/or
|
| - modify it under the terms of the GNU Library General Public
|
| - License as published by the Free Software Foundation; either
|
| - version 2 of the License, or (at your option) any later version.
|
| -
|
| - This library is distributed in the hope that it will be useful,
|
| - but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
| - Library General Public License for more details.
|
| -
|
| - You should have received a copy of the GNU Library General Public License
|
| - along with this library; see the file COPYING.LIB. If not, write to
|
| - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
| - Boston, MA 02110-1301, USA.
|
| -*/
|
| -
|
| -#ifndef Resource_h
|
| -#define Resource_h
|
| -
|
| -#include "core/CoreExport.h"
|
| -#include "core/fetch/CachedMetadataHandler.h"
|
| -#include "core/fetch/IntegrityMetadata.h"
|
| -#include "core/fetch/ResourceLoaderOptions.h"
|
| -#include "core/fetch/ResourceStatus.h"
|
| -#include "platform/MemoryCoordinator.h"
|
| -#include "platform/SharedBuffer.h"
|
| -#include "platform/Timer.h"
|
| -#include "platform/instrumentation/tracing/web_process_memory_dump.h"
|
| -#include "platform/network/ResourceError.h"
|
| -#include "platform/network/ResourceLoadPriority.h"
|
| -#include "platform/network/ResourceRequest.h"
|
| -#include "platform/network/ResourceResponse.h"
|
| -#include "public/platform/WebDataConsumerHandle.h"
|
| -#include "wtf/Allocator.h"
|
| -#include "wtf/AutoReset.h"
|
| -#include "wtf/HashCountedSet.h"
|
| -#include "wtf/HashSet.h"
|
| -#include "wtf/text/AtomicString.h"
|
| -#include "wtf/text/WTFString.h"
|
| -#include <memory>
|
| -
|
| -namespace blink {
|
| -
|
| -class FetchRequest;
|
| -class ResourceClient;
|
| -class ResourceFetcher;
|
| -class ResourceTimingInfo;
|
| -class ResourceLoader;
|
| -class SecurityOrigin;
|
| -
|
| -// A resource that is held in the cache. Classes who want to use this object
|
| -// should derive from ResourceClient, to get the function calls in case the
|
| -// requested data has arrived. This class also does the actual communication
|
| -// with the loader to obtain the resource from the network.
|
| -class CORE_EXPORT Resource : public GarbageCollectedFinalized<Resource>,
|
| - public MemoryCoordinatorClient {
|
| - USING_GARBAGE_COLLECTED_MIXIN(Resource);
|
| - WTF_MAKE_NONCOPYABLE(Resource);
|
| -
|
| - public:
|
| - // |Type| enum values are used in UMAs, so do not change the values of
|
| - // existing |Type|. When adding a new |Type|, append it at the end and update
|
| - // |kLastResourceType|.
|
| - enum Type {
|
| - MainResource,
|
| - Image,
|
| - CSSStyleSheet,
|
| - Script,
|
| - Font,
|
| - Raw,
|
| - SVGDocument,
|
| - XSLStyleSheet,
|
| - LinkPrefetch,
|
| - TextTrack,
|
| - ImportResource,
|
| - Media, // Audio or video file requested by a HTML5 media element
|
| - Manifest,
|
| - Mock // Only for testing
|
| - };
|
| - static const int kLastResourceType = Mock + 1;
|
| -
|
| - using Status = ResourceStatus;
|
| -
|
| - // TODO(hiroshige): Remove the following declarations.
|
| - static constexpr Status NotStarted = ResourceStatus::NotStarted;
|
| - static constexpr Status Pending = ResourceStatus::Pending;
|
| - static constexpr Status Cached = ResourceStatus::Cached;
|
| - static constexpr Status LoadError = ResourceStatus::LoadError;
|
| - static constexpr Status DecodeError = ResourceStatus::DecodeError;
|
| -
|
| - // Whether a resource client for a preload should mark the preload as
|
| - // referenced.
|
| - enum PreloadReferencePolicy {
|
| - MarkAsReferenced,
|
| - DontMarkAsReferenced,
|
| - };
|
| -
|
| - // Used by reloadIfLoFiOrPlaceholderImage().
|
| - enum ReloadLoFiOrPlaceholderPolicy {
|
| - kReloadIfNeeded,
|
| - kReloadAlwaysWithExistingCachePolicy,
|
| - kReloadAlways,
|
| - };
|
| -
|
| - virtual ~Resource();
|
| -
|
| - DECLARE_VIRTUAL_TRACE();
|
| -
|
| - virtual void setEncoding(const String&) {}
|
| - virtual String encoding() const { return String(); }
|
| - virtual void appendData(const char*, size_t);
|
| - virtual void error(const ResourceError&);
|
| - virtual void setCORSFailed() {}
|
| -
|
| - void setNeedsSynchronousCacheHit(bool needsSynchronousCacheHit) {
|
| - m_needsSynchronousCacheHit = needsSynchronousCacheHit;
|
| - }
|
| -
|
| - void setLinkPreload(bool isLinkPreload) { m_linkPreload = isLinkPreload; }
|
| - bool isLinkPreload() const { return m_linkPreload; }
|
| -
|
| - void setPreloadDiscoveryTime(double preloadDiscoveryTime) {
|
| - m_preloadDiscoveryTime = preloadDiscoveryTime;
|
| - }
|
| -
|
| - const ResourceError& resourceError() const { return m_error; }
|
| -
|
| - void setIdentifier(unsigned long identifier) { m_identifier = identifier; }
|
| - unsigned long identifier() const { return m_identifier; }
|
| -
|
| - virtual bool shouldIgnoreHTTPStatusCodeErrors() const { return false; }
|
| -
|
| - const ResourceRequest& resourceRequest() const { return m_resourceRequest; }
|
| - const ResourceRequest& lastResourceRequest() const;
|
| -
|
| - virtual void setRevalidatingRequest(const ResourceRequest&);
|
| -
|
| - void setFetcherSecurityOrigin(SecurityOrigin* origin) {
|
| - m_fetcherSecurityOrigin = origin;
|
| - }
|
| -
|
| - // This url can have a fragment, but it can match resources that differ by the
|
| - // fragment only.
|
| - const KURL& url() const { return resourceRequest().url(); }
|
| - Type getType() const { return static_cast<Type>(m_type); }
|
| - const ResourceLoaderOptions& options() const { return m_options; }
|
| - ResourceLoaderOptions& mutableOptions() { return m_options; }
|
| -
|
| - void didChangePriority(ResourceLoadPriority, int intraPriorityValue);
|
| - virtual ResourcePriority priorityFromObservers() {
|
| - return ResourcePriority();
|
| - }
|
| -
|
| - // The reference policy indicates that the client should not affect whether
|
| - // a preload is considered referenced or not. This allows for "passive"
|
| - // resource clients that simply observe the resource.
|
| - void addClient(ResourceClient*, PreloadReferencePolicy = MarkAsReferenced);
|
| - void removeClient(ResourceClient*);
|
| -
|
| - enum PreloadResult {
|
| - PreloadNotReferenced,
|
| - PreloadReferenced,
|
| - PreloadReferencedWhileLoading,
|
| - PreloadReferencedWhileComplete
|
| - };
|
| - PreloadResult getPreloadResult() const { return m_preloadResult; }
|
| -
|
| - Status getStatus() const { return m_status; }
|
| - void setStatus(Status status) { m_status = status; }
|
| -
|
| - size_t size() const { return encodedSize() + decodedSize() + overheadSize(); }
|
| -
|
| - // Returns the size of content (response body) before decoding. Adding a new
|
| - // usage of this function is not recommended (See the TODO below).
|
| - //
|
| - // TODO(hiroshige): Now encodedSize/decodedSize states are inconsistent and
|
| - // need to be refactored (crbug/643135).
|
| - size_t encodedSize() const { return m_encodedSize; }
|
| -
|
| - // Returns the current memory usage for the encoded data. Adding a new usage
|
| - // of this function is not recommended as the same reason as |encodedSize()|.
|
| - //
|
| - // |encodedSize()| and |encodedSizeMemoryUsageForTesting()| can return
|
| - // different values, e.g., when ImageResource purges encoded image data after
|
| - // finishing loading.
|
| - size_t encodedSizeMemoryUsageForTesting() const {
|
| - return m_encodedSizeMemoryUsage;
|
| - }
|
| -
|
| - size_t decodedSize() const { return m_decodedSize; }
|
| - size_t overheadSize() const { return m_overheadSize; }
|
| -
|
| - bool isLoaded() const { return m_status > Pending; }
|
| -
|
| - bool isLoading() const { return m_status == Pending; }
|
| - bool stillNeedsLoad() const { return m_status < Pending; }
|
| -
|
| - void setLoader(ResourceLoader*);
|
| - ResourceLoader* loader() const { return m_loader.get(); }
|
| -
|
| - virtual bool isImage() const { return false; }
|
| - bool shouldBlockLoadEvent() const;
|
| - bool isLoadEventBlockingResourceType() const;
|
| -
|
| - // Computes the status of an object after loading. Updates the expire date on
|
| - // the cache entry file
|
| - virtual void finish(double finishTime);
|
| - void finish() { finish(0.0); }
|
| -
|
| - bool passesAccessControlCheck(SecurityOrigin*) const;
|
| -
|
| - virtual PassRefPtr<const SharedBuffer> resourceBuffer() const {
|
| - return m_data;
|
| - }
|
| - void setResourceBuffer(PassRefPtr<SharedBuffer>);
|
| -
|
| - virtual bool willFollowRedirect(const ResourceRequest&,
|
| - const ResourceResponse&);
|
| -
|
| - // Called when a redirect response was received but a decision has already
|
| - // been made to not follow it.
|
| - virtual void willNotFollowRedirect() {}
|
| -
|
| - virtual void responseReceived(const ResourceResponse&,
|
| - std::unique_ptr<WebDataConsumerHandle>);
|
| - void setResponse(const ResourceResponse&);
|
| - const ResourceResponse& response() const { return m_response; }
|
| -
|
| - virtual void reportResourceTimingToClients(const ResourceTimingInfo&) {}
|
| -
|
| - // Sets the serialized metadata retrieved from the platform's cache.
|
| - virtual void setSerializedCachedMetadata(const char*, size_t);
|
| -
|
| - // This may return nullptr when the resource isn't cacheable.
|
| - CachedMetadataHandler* cacheHandler();
|
| -
|
| - AtomicString httpContentType() const;
|
| -
|
| - bool wasCanceled() const { return m_error.isCancellation(); }
|
| - bool errorOccurred() const {
|
| - return m_status == LoadError || m_status == DecodeError;
|
| - }
|
| - bool loadFailedOrCanceled() const { return !m_error.isNull(); }
|
| -
|
| - DataBufferingPolicy getDataBufferingPolicy() const {
|
| - return m_options.dataBufferingPolicy;
|
| - }
|
| - void setDataBufferingPolicy(DataBufferingPolicy);
|
| -
|
| - // The isPreloaded() flag is using a counter in order to make sure that even
|
| - // when multiple ResourceFetchers are preloading the resource, it will remain
|
| - // marked as preloaded until *all* of them have used it.
|
| - bool isUnusedPreload() const {
|
| - return isPreloaded() && getPreloadResult() == PreloadNotReferenced;
|
| - }
|
| - bool isPreloaded() const { return m_preloadCount; }
|
| - void increasePreloadCount() { ++m_preloadCount; }
|
| - void decreasePreloadCount() {
|
| - DCHECK(m_preloadCount);
|
| - --m_preloadCount;
|
| - }
|
| -
|
| - bool canReuseRedirectChain() const;
|
| - bool mustRevalidateDueToCacheHeaders() const;
|
| - bool canUseCacheValidator() const;
|
| - bool isCacheValidator() const { return m_isRevalidating; }
|
| - bool hasCacheControlNoStoreHeader() const;
|
| - bool hasVaryHeader() const;
|
| -
|
| - bool isEligibleForIntegrityCheck(SecurityOrigin*) const;
|
| -
|
| - void setIntegrityMetadata(const IntegrityMetadataSet& metadata) {
|
| - m_integrityMetadata = metadata;
|
| - }
|
| - const IntegrityMetadataSet& integrityMetadata() const {
|
| - return m_integrityMetadata;
|
| - }
|
| - // The argument must never be |NotChecked|.
|
| - void setIntegrityDisposition(ResourceIntegrityDisposition);
|
| - ResourceIntegrityDisposition integrityDisposition() const {
|
| - return m_integrityDisposition;
|
| - }
|
| - bool mustRefetchDueToIntegrityMetadata(const FetchRequest&) const;
|
| -
|
| - double currentAge() const;
|
| - double freshnessLifetime() const;
|
| - double stalenessLifetime() const;
|
| -
|
| - bool isAlive() const { return m_isAlive; }
|
| -
|
| - void setCacheIdentifier(const String& cacheIdentifier) {
|
| - m_cacheIdentifier = cacheIdentifier;
|
| - }
|
| - String cacheIdentifier() const { return m_cacheIdentifier; }
|
| -
|
| - virtual void didSendData(unsigned long long /* bytesSent */,
|
| - unsigned long long /* totalBytesToBeSent */) {}
|
| - virtual void didDownloadData(int) {}
|
| -
|
| - double loadFinishTime() const { return m_loadFinishTime; }
|
| -
|
| - void setEncodedDataLength(int64_t value) {
|
| - m_response.setEncodedDataLength(value);
|
| - }
|
| - void addToEncodedBodyLength(int value) {
|
| - m_response.addToEncodedBodyLength(value);
|
| - }
|
| - void addToDecodedBodyLength(int value) {
|
| - m_response.addToDecodedBodyLength(value);
|
| - }
|
| -
|
| - virtual bool canReuse(const ResourceRequest&) const { return true; }
|
| -
|
| - // If cache-aware loading is activated, this callback is called when the first
|
| - // disk-cache-only request failed due to cache miss. After this callback,
|
| - // cache-aware loading is deactivated and a reload with original request will
|
| - // be triggered right away in ResourceLoader.
|
| - virtual void willReloadAfterDiskCacheMiss() {}
|
| -
|
| - // TODO(shaochuan): This is for saving back the actual ResourceRequest sent
|
| - // in ResourceFetcher::startLoad() for retry in cache-aware loading, remove
|
| - // once ResourceRequest is not modified in startLoad(). crbug.com/632580
|
| - void setResourceRequest(const ResourceRequest& resourceRequest) {
|
| - m_resourceRequest = resourceRequest;
|
| - }
|
| -
|
| - // Used by the MemoryCache to reduce the memory consumption of the entry.
|
| - void prune();
|
| -
|
| - virtual void onMemoryDump(WebMemoryDumpLevelOfDetail,
|
| - WebProcessMemoryDump*) const;
|
| -
|
| - // If this Resource is ImageResource and has the Lo-Fi response headers or is
|
| - // a placeholder, reload the full original image with the Lo-Fi state set to
|
| - // off and optionally bypassing the cache.
|
| - virtual void reloadIfLoFiOrPlaceholderImage(ResourceFetcher*,
|
| - ReloadLoFiOrPlaceholderPolicy) {}
|
| -
|
| - static const char* resourceTypeToString(
|
| - Type,
|
| - const AtomicString& fetchInitiatorName);
|
| -
|
| - protected:
|
| - Resource(const ResourceRequest&, Type, const ResourceLoaderOptions&);
|
| -
|
| - virtual void checkNotify();
|
| -
|
| - void markClientFinished(ResourceClient*);
|
| -
|
| - virtual bool hasClientsOrObservers() const {
|
| - return !m_clients.isEmpty() || !m_clientsAwaitingCallback.isEmpty() ||
|
| - !m_finishedClients.isEmpty();
|
| - }
|
| - virtual void destroyDecodedDataForFailedRevalidation() {}
|
| -
|
| - void setEncodedSize(size_t);
|
| - void setDecodedSize(size_t);
|
| -
|
| - void finishPendingClients();
|
| -
|
| - virtual void didAddClient(ResourceClient*);
|
| - void willAddClientOrObserver(PreloadReferencePolicy);
|
| -
|
| - void didRemoveClientOrObserver();
|
| - virtual void allClientsAndObserversRemoved();
|
| -
|
| - bool hasClient(ResourceClient* client) const {
|
| - return m_clients.contains(client) ||
|
| - m_clientsAwaitingCallback.contains(client) ||
|
| - m_finishedClients.contains(client);
|
| - }
|
| -
|
| - struct RedirectPair {
|
| - DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
|
| -
|
| - public:
|
| - explicit RedirectPair(const ResourceRequest& request,
|
| - const ResourceResponse& redirectResponse)
|
| - : m_request(request), m_redirectResponse(redirectResponse) {}
|
| -
|
| - ResourceRequest m_request;
|
| - ResourceResponse m_redirectResponse;
|
| - };
|
| - const Vector<RedirectPair>& redirectChain() const { return m_redirectChain; }
|
| -
|
| - virtual void destroyDecodedDataIfPossible() {}
|
| -
|
| - // Returns the memory dump name used for tracing. See Resource::onMemoryDump.
|
| - String getMemoryDumpName() const;
|
| -
|
| - const HeapHashCountedSet<WeakMember<ResourceClient>>& clients() const {
|
| - return m_clients;
|
| - }
|
| -
|
| - void setCachePolicyBypassingCache();
|
| - void setPreviewsStateNoTransform();
|
| - void clearRangeRequestHeader();
|
| -
|
| - SharedBuffer* data() const { return m_data.get(); }
|
| - void clearData();
|
| -
|
| - class ProhibitAddRemoveClientInScope : public AutoReset<bool> {
|
| - public:
|
| - ProhibitAddRemoveClientInScope(Resource* resource)
|
| - : AutoReset(&resource->m_isAddRemoveClientProhibited, true) {}
|
| - };
|
| -
|
| - class RevalidationStartForbiddenScope : public AutoReset<bool> {
|
| - public:
|
| - RevalidationStartForbiddenScope(Resource* resource)
|
| - : AutoReset(&resource->m_isRevalidationStartForbidden, true) {}
|
| - };
|
| -
|
| - private:
|
| - class ResourceCallback;
|
| - class CachedMetadataHandlerImpl;
|
| - class ServiceWorkerResponseCachedMetadataHandler;
|
| -
|
| - void cancelTimerFired(TimerBase*);
|
| -
|
| - void revalidationSucceeded(const ResourceResponse&);
|
| - void revalidationFailed();
|
| -
|
| - size_t calculateOverheadSize() const;
|
| -
|
| - String reasonNotDeletable() const;
|
| -
|
| - // MemoryCoordinatorClient overrides:
|
| - void onMemoryStateChange(MemoryState) override;
|
| -
|
| - Member<CachedMetadataHandlerImpl> m_cacheHandler;
|
| - RefPtr<SecurityOrigin> m_fetcherSecurityOrigin;
|
| -
|
| - ResourceError m_error;
|
| -
|
| - double m_loadFinishTime;
|
| -
|
| - unsigned long m_identifier;
|
| -
|
| - size_t m_encodedSize;
|
| - size_t m_encodedSizeMemoryUsage;
|
| - size_t m_decodedSize;
|
| -
|
| - // Resource::calculateOverheadSize() is affected by changes in
|
| - // |m_resourceRequest.url()|, but |m_overheadSize| is not updated after
|
| - // initial |m_resourceRequest| is given, to reduce MemoryCache manipulation
|
| - // and thus potential bugs. crbug.com/594644
|
| - const size_t m_overheadSize;
|
| -
|
| - unsigned m_preloadCount;
|
| -
|
| - double m_preloadDiscoveryTime;
|
| -
|
| - String m_cacheIdentifier;
|
| -
|
| - PreloadResult m_preloadResult;
|
| - Type m_type;
|
| - Status m_status;
|
| -
|
| - bool m_needsSynchronousCacheHit;
|
| - bool m_linkPreload;
|
| - bool m_isRevalidating;
|
| - bool m_isAlive;
|
| - bool m_isAddRemoveClientProhibited;
|
| - bool m_isRevalidationStartForbidden = false;
|
| -
|
| - ResourceIntegrityDisposition m_integrityDisposition;
|
| - IntegrityMetadataSet m_integrityMetadata;
|
| -
|
| - // Ordered list of all redirects followed while fetching this resource.
|
| - Vector<RedirectPair> m_redirectChain;
|
| -
|
| - HeapHashCountedSet<WeakMember<ResourceClient>> m_clients;
|
| - HeapHashCountedSet<WeakMember<ResourceClient>> m_clientsAwaitingCallback;
|
| - HeapHashCountedSet<WeakMember<ResourceClient>> m_finishedClients;
|
| -
|
| - ResourceLoaderOptions m_options;
|
| -
|
| - double m_responseTimestamp;
|
| -
|
| - TaskRunnerTimer<Resource> m_cancelTimer;
|
| -
|
| - ResourceRequest m_resourceRequest;
|
| - Member<ResourceLoader> m_loader;
|
| - ResourceResponse m_response;
|
| -
|
| - RefPtr<SharedBuffer> m_data;
|
| -};
|
| -
|
| -class ResourceFactory {
|
| - STACK_ALLOCATED();
|
| -
|
| - public:
|
| - virtual Resource* create(const ResourceRequest&,
|
| - const ResourceLoaderOptions&,
|
| - const String&) const = 0;
|
| - Resource::Type type() const { return m_type; }
|
| -
|
| - protected:
|
| - explicit ResourceFactory(Resource::Type type) : m_type(type) {}
|
| -
|
| - Resource::Type m_type;
|
| -};
|
| -
|
| -#define DEFINE_RESOURCE_TYPE_CASTS(typeName) \
|
| - DEFINE_TYPE_CASTS(typeName##Resource, Resource, resource, \
|
| - resource->getType() == Resource::typeName, \
|
| - resource.getType() == Resource::typeName);
|
| -
|
| -} // namespace blink
|
| -
|
| -#endif
|
|
|