#include "wtf/Forward.h"
#include "wtf/RefCounted.h"
-namespace WebCore {
+namespace blink {
+class WebThreadedDataReceiver;
+}
+
+namespace blink {
class Resource;
class KURL;
class ResourceError;
-class ResourceResponse;
class ResourceLoaderHost;
-class ResourceLoader FINAL : public RefCounted<ResourceLoader>, protected blink::WebURLLoaderClient {
+class ResourceLoader final : public RefCountedWillBeGarbageCollectedFinalized<ResourceLoader>, protected WebURLLoaderClient {
public:
- static PassRefPtr<ResourceLoader> create(ResourceLoaderHost*, Resource*, const ResourceRequest&, const ResourceLoaderOptions&);
+ static PassRefPtrWillBeRawPtr<ResourceLoader> create(ResourceLoaderHost*, Resource*, const ResourceRequest&, const ResourceLoaderOptions&);
virtual ~ResourceLoader();
+ void trace(Visitor*);
void start();
void changeToSynchronous();
void setDefersLoading(bool);
bool defersLoading() const { return m_defersLoading; }
+ void attachThreadedDataReceiver(PassOwnPtr<blink::WebThreadedDataReceiver>);
+
void releaseResources();
- void didChangePriority(ResourceLoadPriority);
+ void didChangePriority(ResourceLoadPriority, int intraPriorityValue);
// WebURLLoaderClient
- virtual void willSendRequest(blink::WebURLLoader*, blink::WebURLRequest&, const blink::WebURLResponse& redirectResponse) OVERRIDE;
- virtual void didSendData(blink::WebURLLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) OVERRIDE;
- virtual void didReceiveResponse(blink::WebURLLoader*, const blink::WebURLResponse&) OVERRIDE;
- virtual void didReceiveData(blink::WebURLLoader*, const char*, int, int encodedDataLength) OVERRIDE;
- virtual void didReceiveCachedMetadata(blink::WebURLLoader*, const char* data, int length) OVERRIDE;
- virtual void didFinishLoading(blink::WebURLLoader*, double finishTime) OVERRIDE;
- virtual void didFail(blink::WebURLLoader*, const blink::WebURLError&) OVERRIDE;
- virtual void didDownloadData(blink::WebURLLoader*, int, int) OVERRIDE;
+ void willSendRequest(blink::WebURLLoader*, blink::WebURLRequest&, const blink::WebURLResponse& redirectResponse) override;
+ void didSendData(blink::WebURLLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
+ void didReceiveResponse(blink::WebURLLoader*, const blink::WebURLResponse&) override;
+ void didReceiveResponse(blink::WebURLLoader*, const blink::WebURLResponse&, WebDataConsumerHandle*) override;
+ void didReceiveData(blink::WebURLLoader*, const char*, int, int encodedDataLength) override;
+ void didReceiveCachedMetadata(blink::WebURLLoader*, const char* data, int length) override;
+ void didFinishLoading(blink::WebURLLoader*, double finishTime, int64_t encodedDataLength) override;
+ void didFail(blink::WebURLLoader*, const blink::WebURLError&) override;
+ void didDownloadData(blink::WebURLLoader*, int, int) override;
const KURL& url() const { return m_request.url(); }
- bool shouldSniffContent() const { return m_options.sniffContent == SniffContent; }
bool isLoadedBy(ResourceLoaderHost*) const;
bool reachedTerminalState() const { return m_state == Terminated; }
const ResourceRequest& request() const { return m_request; }
+ class RequestCountTracker {
+ public:
+ RequestCountTracker(ResourceLoaderHost*, Resource*);
+ RequestCountTracker(const RequestCountTracker&);
+ ~RequestCountTracker();
+ private:
+ ResourceLoaderHost* m_host;
+ Resource* m_resource;
+ };
+
private:
ResourceLoader(ResourceLoaderHost*, Resource*, const ResourceLoaderOptions&);
void init(const ResourceRequest&);
void requestSynchronously();
- void didFinishLoadingOnePart(double finishTime);
+ void didFinishLoadingOnePart(double finishTime, int64_t encodedDataLength);
bool responseNeedsAccessControlCheck() const;
+ void didComplete();
+
+ ResourceRequest& applyOptions(ResourceRequest&) const;
+
OwnPtr<blink::WebURLLoader> m_loader;
- RefPtr<ResourceLoaderHost> m_host;
+ RefPtrWillBeMember<ResourceLoaderHost> m_host;
ResourceRequest m_request;
ResourceRequest m_originalRequest; // Before redirects.
bool m_notifiedLoadComplete;
bool m_defersLoading;
+ OwnPtr<ResourceRequest> m_fallbackRequestForServiceWorker;
ResourceRequest m_deferredRequest;
ResourceLoaderOptions m_options;
ConnectionStateFailed,
};
- class RequestCountTracker {
- public:
- RequestCountTracker(ResourceLoaderHost*, Resource*);
- ~RequestCountTracker();
- private:
- ResourceLoaderHost* m_host;
- Resource* m_resource;
- };
-
- Resource* m_resource;
+ RawPtrWillBeMember<Resource> m_resource;
ResourceLoaderState m_state;
// Used for sanity checking to make sure we don't experience illegal state