summaryrefslogtreecommitdiff
path: root/Source/WebCore/loader/SubresourceLoader.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/loader/SubresourceLoader.h')
-rw-r--r--Source/WebCore/loader/SubresourceLoader.h97
1 files changed, 60 insertions, 37 deletions
diff --git a/Source/WebCore/loader/SubresourceLoader.h b/Source/WebCore/loader/SubresourceLoader.h
index 58a7817bb..929bc563a 100644
--- a/Source/WebCore/loader/SubresourceLoader.h
+++ b/Source/WebCore/loader/SubresourceLoader.h
@@ -1,18 +1,18 @@
/*
- * Copyright (C) 2005, 2006, 2009 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
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
* 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
+ * documentation and/or other materials provided with the distribution.
+ * 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.
+ * from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
@@ -26,8 +26,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef SubresourceLoader_h
-#define SubresourceLoader_h
+#pragma once
#include "FrameLoaderTypes.h"
#include "ResourceLoader.h"
@@ -39,57 +38,78 @@ namespace WebCore {
class CachedResource;
class CachedResourceLoader;
class Document;
-class PageActivityAssertionToken;
class ResourceRequest;
+class SecurityOrigin;
-class SubresourceLoader : public ResourceLoader {
+class SubresourceLoader final : public ResourceLoader {
public:
- static PassRefPtr<SubresourceLoader> create(Frame*, CachedResource*, const ResourceRequest&, const ResourceLoaderOptions&);
+ WEBCORE_EXPORT static RefPtr<SubresourceLoader> create(Frame&, CachedResource&, const ResourceRequest&, const ResourceLoaderOptions&);
virtual ~SubresourceLoader();
void cancelIfNotFinishing();
- virtual bool isSubresourceLoader() override;
+ bool isSubresourceLoader() override;
CachedResource* cachedResource();
+ SecurityOrigin* origin() { return m_origin.get(); }
#if PLATFORM(IOS)
- virtual bool startLoading() override;
+ bool startLoading() override;
// FIXME: What is an "iOS" original request? Why is it necessary?
- virtual const ResourceRequest& iOSOriginalRequest() const override { return m_iOSOriginalRequest; }
+ const ResourceRequest& iOSOriginalRequest() const override { return m_iOSOriginalRequest; }
#endif
-private:
- SubresourceLoader(Frame*, CachedResource*, const ResourceLoaderOptions&);
-
- virtual bool init(const ResourceRequest&) override;
+ unsigned redirectCount() const { return m_redirectCount; }
- virtual void willSendRequest(ResourceRequest&, const ResourceResponse& redirectResponse) override;
- virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
- virtual void didReceiveResponse(const ResourceResponse&) override;
- virtual void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType) override;
- virtual void didReceiveBuffer(PassRefPtr<SharedBuffer>, long long encodedDataLength, DataPayloadType) override;
- virtual void didFinishLoading(double finishTime) override;
- virtual void didFail(const ResourceError&) override;
- virtual void willCancel(const ResourceError&) override;
- virtual void didCancel(const ResourceError&) override;
+private:
+ SubresourceLoader(Frame&, CachedResource&, const ResourceLoaderOptions&);
+
+ bool init(const ResourceRequest&) override;
+
+ void willSendRequestInternal(ResourceRequest&, const ResourceResponse& redirectResponse) override;
+ void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
+ void didReceiveResponse(const ResourceResponse&) override;
+ void didReceiveData(const char*, unsigned, long long encodedDataLength, DataPayloadType) override;
+ void didReceiveBuffer(Ref<SharedBuffer>&&, long long encodedDataLength, DataPayloadType) override;
+ void didFinishLoading(double finishTime) override;
+ void didFail(const ResourceError&) override;
+ void willCancel(const ResourceError&) override;
+ void didCancel(const ResourceError&) override;
+ void didRetrieveDerivedDataFromCache(const String& type, SharedBuffer&) override;
+
+#if PLATFORM(COCOA) && !USE(CFURLCONNECTION)
+ NSCachedURLResponse *willCacheResponse(ResourceHandle*, NSCachedURLResponse*) override;
+#endif
+#if PLATFORM(COCOA) && USE(CFURLCONNECTION)
+ CFCachedURLResponseRef willCacheResponse(ResourceHandle*, CFCachedURLResponseRef) override;
+#endif
#if USE(NETWORK_CFDATA_ARRAY_CALLBACK)
- virtual bool supportsDataArray() override { return true; }
- virtual void didReceiveDataArray(CFArrayRef) override;
+ bool supportsDataArray() override { return true; }
+ void didReceiveDataArray(CFArrayRef) override;
#endif
- virtual void releaseResources() override;
+ void releaseResources() override;
#if USE(SOUP)
- virtual char* getOrCreateReadBuffer(size_t requestedSize, size_t& actualSize) override;
+ char* getOrCreateReadBuffer(size_t requestedSize, size_t& actualSize) override;
#endif
bool checkForHTTPStatusCodeError();
+ bool checkResponseCrossOriginAccessControl(const ResourceResponse&, String&);
+ bool checkRedirectionCrossOriginAccessControl(const ResourceRequest& previousRequest, const ResourceResponse&, ResourceRequest& newRequest, String&);
- void didReceiveDataOrBuffer(const char*, int, PassRefPtr<SharedBuffer>, long long encodedDataLength, DataPayloadType);
+ void didReceiveDataOrBuffer(const char*, int, RefPtr<SharedBuffer>&&, long long encodedDataLength, DataPayloadType);
void notifyDone();
+#if ENABLE(WEB_TIMING)
+ void reportResourceTiming();
+#endif
+
+#if USE(QUICK_LOOK)
+ bool shouldCreateQuickLookHandleForResponse(const ResourceResponse&) const;
+#endif
+
enum SubresourceLoaderState {
Uninitialized,
Initialized,
@@ -100,12 +120,15 @@ private:
};
class RequestCountTracker {
+#if !COMPILER(MSVC)
+ WTF_MAKE_FAST_ALLOCATED;
+#endif
public:
- RequestCountTracker(CachedResourceLoader*, CachedResource*);
+ RequestCountTracker(CachedResourceLoader&, const CachedResource&);
~RequestCountTracker();
private:
- CachedResourceLoader* m_cachedResourceLoader;
- CachedResource* m_resource;
+ CachedResourceLoader& m_cachedResourceLoader;
+ const CachedResource& m_resource;
};
#if PLATFORM(IOS)
@@ -114,9 +137,9 @@ private:
CachedResource* m_resource;
bool m_loadingMultipartContent;
SubresourceLoaderState m_state;
- OwnPtr<RequestCountTracker> m_requestCountTracker;
+ std::optional<RequestCountTracker> m_requestCountTracker;
+ RefPtr<SecurityOrigin> m_origin;
+ unsigned m_redirectCount { 0 };
};
}
-
-#endif // SubresourceLoader_h