summaryrefslogtreecommitdiff
path: root/Source/WebCore/loader/ResourceLoader.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/loader/ResourceLoader.h')
-rw-r--r--Source/WebCore/loader/ResourceLoader.h184
1 files changed, 104 insertions, 80 deletions
diff --git a/Source/WebCore/loader/ResourceLoader.h b/Source/WebCore/loader/ResourceLoader.h
index 6b075ed3d..5bb1eda0a 100644
--- a/Source/WebCore/loader/ResourceLoader.h
+++ b/Source/WebCore/loader/ResourceLoader.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005, 2006, 2011 Apple Inc. All rights reserved.
+ * Copyright (C) 2005-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -10,7 +10,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
@@ -26,17 +26,23 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef ResourceLoader_h
-#define ResourceLoader_h
+#pragma once
+#include "LoadTiming.h"
#include "ResourceHandleClient.h"
#include "ResourceLoaderOptions.h"
#include "ResourceLoaderTypes.h"
#include "ResourceRequest.h"
#include "ResourceResponse.h"
-
#include <wtf/Forward.h>
-#include <wtf/RefCounted.h>
+
+#if ENABLE(CONTENT_EXTENSIONS)
+#include "ResourceLoadInfo.h"
+#endif
+
+namespace WTF {
+class SchedulePair;
+}
namespace WebCore {
@@ -44,18 +50,19 @@ class AuthenticationChallenge;
class DocumentLoader;
class Frame;
class FrameLoader;
+class QuickLookHandle;
class URL;
-class ResourceBuffer;
-class ResourceHandle;
class ResourceLoader : public RefCounted<ResourceLoader>, protected ResourceHandleClient {
public:
- virtual ~ResourceLoader();
+ virtual ~ResourceLoader() = 0;
- void cancel();
+ WEBCORE_EXPORT void cancel();
virtual bool init(const ResourceRequest&);
+ void deliverResponseAndData(const ResourceResponse&, RefPtr<SharedBuffer>&&);
+
#if PLATFORM(IOS)
virtual bool startLoading()
{
@@ -64,16 +71,17 @@ public:
}
virtual const ResourceRequest& iOSOriginalRequest() const { return request(); }
- virtual RetainPtr<CFDictionaryRef> connectionProperties(ResourceHandle*) override;
#endif
- FrameLoader* frameLoader() const;
+ WEBCORE_EXPORT FrameLoader* frameLoader() const;
DocumentLoader* documentLoader() const { return m_documentLoader.get(); }
const ResourceRequest& originalRequest() const { return m_originalRequest; }
-
- virtual void cancel(const ResourceError&);
- ResourceError cancelledError();
+
+ WEBCORE_EXPORT void start();
+ WEBCORE_EXPORT void cancel(const ResourceError&);
+ WEBCORE_EXPORT ResourceError cancelledError();
ResourceError blockedError();
+ ResourceError blockedByContentBlockerError();
ResourceError cannotShowURLError();
virtual void setDefersLoading(bool);
@@ -82,118 +90,136 @@ public:
unsigned long identifier() const { return m_identifier; }
virtual void releaseResources();
- const ResourceResponse& response() const;
+ const ResourceResponse& response() const { return m_response; }
- ResourceBuffer* resourceData() const { return m_resourceData.get(); }
+ SharedBuffer* resourceData() const { return m_resourceData.get(); }
void clearResourceData();
virtual bool isSubresourceLoader();
-
- virtual void willSendRequest(ResourceRequest&, const ResourceResponse& redirectResponse);
+
+ virtual void willSendRequest(ResourceRequest&&, const ResourceResponse& redirectResponse, std::function<void(ResourceRequest&&)>&& callback);
virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
virtual void didReceiveResponse(const ResourceResponse&);
virtual void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType);
- virtual void didReceiveBuffer(PassRefPtr<SharedBuffer>, long long encodedDataLength, DataPayloadType);
- void willStopBufferingData(const char*, unsigned);
+ virtual void didReceiveBuffer(Ref<SharedBuffer>&&, long long encodedDataLength, DataPayloadType);
virtual void didFinishLoading(double finishTime);
virtual void didFail(const ResourceError&);
#if USE(NETWORK_CFDATA_ARRAY_CALLBACK)
virtual void didReceiveDataArray(CFArrayRef dataArray);
#endif
- void didChangePriority(ResourceLoadPriority);
+ virtual void didRetrieveDerivedDataFromCache(const String& type, SharedBuffer&);
virtual bool shouldUseCredentialStorage();
virtual void didReceiveAuthenticationChallenge(const AuthenticationChallenge&);
- void didCancelAuthenticationChallenge(const AuthenticationChallenge&);
#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
virtual bool canAuthenticateAgainstProtectionSpace(const ProtectionSpace&);
#endif
virtual void receivedCancellation(const AuthenticationChallenge&);
- // ResourceHandleClient
- virtual void willSendRequest(ResourceHandle*, ResourceRequest&, const ResourceResponse& redirectResponse) override;
- virtual void didSendData(ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
- virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&) override;
- virtual void didReceiveData(ResourceHandle*, const char*, unsigned, int encodedDataLength) override;
- virtual void didReceiveBuffer(ResourceHandle*, PassRefPtr<SharedBuffer>, int encodedDataLength) override;
- virtual void didFinishLoading(ResourceHandle*, double finishTime) override;
- virtual void didFail(ResourceHandle*, const ResourceError&) override;
- virtual void wasBlocked(ResourceHandle*) override;
- virtual void cannotShowURL(ResourceHandle*) override;
-#if PLATFORM(MAC) && !USE(CFNETWORK)
- virtual void willStopBufferingData(ResourceHandle*, const char* data, unsigned length) override { willStopBufferingData(data, length); }
-#endif
- virtual bool shouldUseCredentialStorage(ResourceHandle*) override { return shouldUseCredentialStorage(); }
- virtual void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge& challenge) override { didReceiveAuthenticationChallenge(challenge); }
- virtual void didCancelAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge& challenge) override { didCancelAuthenticationChallenge(challenge); }
-#if USE(NETWORK_CFDATA_ARRAY_CALLBACK)
- virtual void didReceiveDataArray(ResourceHandle*, CFArrayRef dataArray) override;
-#endif
-#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
- virtual bool canAuthenticateAgainstProtectionSpace(ResourceHandle*, const ProtectionSpace& protectionSpace) override { return canAuthenticateAgainstProtectionSpace(protectionSpace); }
-#endif
- virtual void receivedCancellation(ResourceHandle*, const AuthenticationChallenge& challenge) override { receivedCancellation(challenge); }
-#if PLATFORM(MAC)
-#if USE(CFNETWORK)
- virtual CFCachedURLResponseRef willCacheResponse(ResourceHandle*, CFCachedURLResponseRef) override;
-#else
- virtual NSCachedURLResponse* willCacheResponse(ResourceHandle*, NSCachedURLResponse*) override;
-#endif
-#endif // PLATFORM(MAC)
-#if PLATFORM(WIN) && USE(CFNETWORK)
- // FIXME: Windows should use willCacheResponse - <https://bugs.webkit.org/show_bug.cgi?id=57257>.
- virtual bool shouldCacheResponse(ResourceHandle*, CFCachedURLResponseRef) override;
+#if USE(QUICK_LOOK)
+ bool isQuickLookResource() const;
#endif
- const URL& url() const { return m_request.url(); }
+ const URL& url() const { return m_request.url(); }
ResourceHandle* handle() const { return m_handle.get(); }
bool shouldSendResourceLoadCallbacks() const { return m_options.sendLoadCallbacks == SendCallbacks; }
void setSendCallbackPolicy(SendCallbackPolicy sendLoadCallbacks) { m_options.sendLoadCallbacks = sendLoadCallbacks; }
bool shouldSniffContent() const { return m_options.sniffContent == SniffContent; }
- ClientCredentialPolicy clientCredentialPolicy() const { return m_options.clientCredentialPolicy; }
+ WEBCORE_EXPORT bool isAllowedToAskUserForCredentials() const;
+ bool shouldIncludeCertificateInfo() const { return m_options.certificateInfoPolicy == IncludeCertificateInfo; }
bool reachedTerminalState() const { return m_reachedTerminalState; }
+
const ResourceRequest& request() const { return m_request; }
void setDataBufferingPolicy(DataBufferingPolicy);
-protected:
- ResourceLoader(Frame*, ResourceLoaderOptions);
+ void willSwitchToSubstituteResource();
+
+ const LoadTiming& loadTiming() { return m_loadTiming; }
+
+#if PLATFORM(COCOA) && !USE(CFURLCONNECTION)
+ void schedule(WTF::SchedulePair&);
+ void unschedule(WTF::SchedulePair&);
+#endif
+
+ const Frame* frame() const { return m_frame.get(); }
+ WEBCORE_EXPORT bool isAlwaysOnLoggingAllowed() const;
+
+ const ResourceLoaderOptions& options() const { return m_options; }
- friend class ResourceLoadScheduler; // for access to start()
- // start() actually sends the load to the network (unless the load is being
- // deferred) and should only be called by ResourceLoadScheduler or setDefersLoading().
- void start();
+protected:
+ ResourceLoader(Frame&, ResourceLoaderOptions);
void didFinishLoadingOnePart(double finishTime);
void cleanupForError(const ResourceError&);
bool wasCancelled() const { return m_cancellationStatus >= Cancelled; }
- void didReceiveDataOrBuffer(const char*, unsigned, PassRefPtr<SharedBuffer>, long long encodedDataLength, DataPayloadType);
+ void didReceiveDataOrBuffer(const char*, unsigned, RefPtr<SharedBuffer>&&, long long encodedDataLength, DataPayloadType);
+
+#if PLATFORM(COCOA) && !USE(CFURLCONNECTION)
+ NSCachedURLResponse* willCacheResponse(ResourceHandle*, NSCachedURLResponse*) override;
+#endif
+#if PLATFORM(COCOA) && USE(CFURLCONNECTION)
+ CFCachedURLResponseRef willCacheResponse(ResourceHandle*, CFCachedURLResponseRef) override;
+#endif
- const ResourceLoaderOptions& options() { return m_options; }
+ virtual void willSendRequestInternal(ResourceRequest&, const ResourceResponse& redirectResponse);
RefPtr<ResourceHandle> m_handle;
RefPtr<Frame> m_frame;
RefPtr<DocumentLoader> m_documentLoader;
ResourceResponse m_response;
-
+ LoadTiming m_loadTiming;
+#if USE(QUICK_LOOK)
+ std::unique_ptr<QuickLookHandle> m_quickLookHandle;
+#endif
+
private:
virtual void willCancel(const ResourceError&) = 0;
virtual void didCancel(const ResourceError&) = 0;
void addDataOrBuffer(const char*, unsigned, SharedBuffer*, DataPayloadType);
+ void loadDataURL();
+ void finishNetworkLoad();
+
+ // ResourceHandleClient
+ ResourceRequest willSendRequest(ResourceHandle*, ResourceRequest&&, ResourceResponse&& redirectResponse) override;
+ void didSendData(ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
+ void didReceiveResponse(ResourceHandle*, ResourceResponse&&) override;
+ void didReceiveData(ResourceHandle*, const char*, unsigned, int encodedDataLength) override;
+ void didReceiveBuffer(ResourceHandle*, Ref<SharedBuffer>&&, int encodedDataLength) override;
+ void didFinishLoading(ResourceHandle*, double finishTime) override;
+ void didFail(ResourceHandle*, const ResourceError&) override;
+ void wasBlocked(ResourceHandle*) override;
+ void cannotShowURL(ResourceHandle*) override;
+#if USE(NETWORK_CFDATA_ARRAY_CALLBACK)
+ void didReceiveDataArray(ResourceHandle*, CFArrayRef dataArray) override;
+#endif
+ bool shouldUseCredentialStorage(ResourceHandle*) override { return shouldUseCredentialStorage(); }
+ void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge& challenge) override { didReceiveAuthenticationChallenge(challenge); }
+#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
+ bool canAuthenticateAgainstProtectionSpace(ResourceHandle*, const ProtectionSpace& protectionSpace) override { return canAuthenticateAgainstProtectionSpace(protectionSpace); }
+#endif
+ void receivedCancellation(ResourceHandle*, const AuthenticationChallenge& challenge) override { receivedCancellation(challenge); }
+#if PLATFORM(IOS)
+ RetainPtr<CFDictionaryRef> connectionProperties(ResourceHandle*) override;
+#endif
+#if PLATFORM(WIN) && USE(CFURLCONNECTION)
+ // FIXME: Windows should use willCacheResponse - <https://bugs.webkit.org/show_bug.cgi?id=57257>.
+ bool shouldCacheResponse(ResourceHandle*, CFCachedURLResponseRef) override;
+#endif
ResourceRequest m_request;
ResourceRequest m_originalRequest; // Before redirects.
- RefPtr<ResourceBuffer> m_resourceData;
+ RefPtr<SharedBuffer> m_resourceData;
- unsigned long m_identifier;
+ unsigned long m_identifier { 0 };
- bool m_reachedTerminalState;
- bool m_notifiedLoadComplete;
+ bool m_reachedTerminalState { false };
+ bool m_notifiedLoadComplete { false };
enum CancellationStatus {
NotCancelled,
@@ -201,18 +227,16 @@ private:
Cancelled,
FinishedCancel
};
- CancellationStatus m_cancellationStatus;
+ CancellationStatus m_cancellationStatus { NotCancelled };
bool m_defersLoading;
ResourceRequest m_deferredRequest;
ResourceLoaderOptions m_options;
-};
-
-inline const ResourceResponse& ResourceLoader::response() const
-{
- return m_response;
-}
-
-}
+#if ENABLE(CONTENT_EXTENSIONS)
+protected:
+ ResourceType m_resourceType { ResourceType::Invalid };
#endif
+};
+
+} // namespace WebCore