SharedBuffer* resourceBuffer() const { ASSERT(!m_purgeableData); return m_data.get(); }
void setResourceBuffer(PassRefPtr<SharedBuffer>);
- virtual void willSendRequest(ResourceRequest&, const ResourceResponse&) { m_requestedFromNetworkingLayer = true; }
+ virtual void willSendRequest(ResourceRequest&, const ResourceResponse&);
+
virtual void updateRequest(const ResourceRequest&) { }
virtual void responseReceived(const ResourceResponse&);
void setResponse(const ResourceResponse& response) { m_response = response; }
bool canDelete() const { return !hasClients() && !m_loader && !m_preloadCount && !m_handleCount && !m_protectorCount && !m_resourceToRevalidate && !m_proxyResource; }
bool hasOneHandle() const { return m_handleCount == 1; }
- bool isExpired() const;
-
// List of acceptable MIME types separated by ",".
// A MIME type may contain a wildcard, e.g. "text/*".
AtomicString accept() const { return m_accept; }
DataBufferingPolicy dataBufferingPolicy() const { return m_options.dataBufferingPolicy; }
void setDataBufferingPolicy(DataBufferingPolicy);
- virtual void destroyDecodedData() { }
-
bool isPreloaded() const { return m_preloadCount; }
void increasePreloadCount() { ++m_preloadCount; }
void decreasePreloadCount() { ASSERT(m_preloadCount); --m_preloadCount; }
void registerHandle(ResourcePtrBase* h);
void unregisterHandle(ResourcePtrBase* h);
- bool canUseCacheValidator() const;
+ bool canReuseRedirectChain() const;
bool mustRevalidateDueToCacheHeaders() const;
+ bool canUseCacheValidator() const;
bool isCacheValidator() const { return m_resourceToRevalidate; }
Resource* resourceToRevalidate() const { return m_resourceToRevalidate; }
void setResourceToRevalidate(Resource*);
bool isPurgeable() const;
bool wasPurged() const;
-
- // This is used by the archive machinery to get at a purged resource without
- // triggering a load. We should make it protected again if we can find a
- // better way to handle the archive case.
- bool makePurgeable(bool purgeable);
+ bool lock();
virtual void didSendData(unsigned long long /* bytesSent */, unsigned long long /* totalBytesToBeSent */) { }
virtual void didDownloadData(int) { }
virtual bool canReuse(const ResourceRequest&) const { return true; }
+ void prune();
+
static const char* resourceTypeToString(Type, const FetchInitiatorInfo&);
protected:
void setDecodedSize(size_t);
void didAccessDecodedData(double timeStamp);
- bool isSafeToMakePurgeable() const;
-
virtual void switchClientsToRevalidatedResource();
void clearResourceToRevalidate();
void updateResponseAfterRevalidation(const ResourceResponse& validatingResponse);
bool hasClient(ResourceClient* client) { return m_clients.contains(client) || m_clientsAwaitingCallback.contains(client); }
+ struct RedirectPair {
+ public:
+ explicit RedirectPair(const ResourceRequest& request, const ResourceResponse& redirectResponse)
+ : m_request(request)
+ , m_redirectResponse(redirectResponse)
+ {
+ }
+
+ const ResourceRequest m_request;
+ const ResourceResponse m_redirectResponse;
+ };
+ const Vector<RedirectPair>& redirectChain() const { return m_redirectChain; }
+
+ virtual bool isSafeToUnlock() const { return false; }
+ virtual void destroyDecodedDataIfPossible() { }
+
ResourceRequest m_resourceRequest;
AtomicString m_accept;
RefPtr<ResourceLoader> m_loader;
void revalidationSucceeded(const ResourceResponse&);
void revalidationFailed();
- double currentAge() const;
- double freshnessLifetime() const;
+ bool unlock();
void failBeforeStarting();
// These handles will need to be updated to point to the m_resourceToRevalidate in case we get 304 response.
HashSet<ResourcePtrBase*> m_handlesToRevalidate;
+
+ // Ordered list of all redirects followed while fetching this resource.
+ Vector<RedirectPair> m_redirectChain;
};
#if !LOG_DISABLED