summaryrefslogtreecommitdiff
path: root/Source/WebCore/loader/DocumentThreadableLoader.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/loader/DocumentThreadableLoader.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/loader/DocumentThreadableLoader.h')
-rw-r--r--Source/WebCore/loader/DocumentThreadableLoader.h101
1 files changed, 63 insertions, 38 deletions
diff --git a/Source/WebCore/loader/DocumentThreadableLoader.h b/Source/WebCore/loader/DocumentThreadableLoader.h
index bf31ba310..37f951f75 100644
--- a/Source/WebCore/loader/DocumentThreadableLoader.h
+++ b/Source/WebCore/loader/DocumentThreadableLoader.h
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2009, 2012 Google Inc. All rights reserved.
+ * Copyright (C) 2016 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
@@ -28,44 +29,45 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef DocumentThreadableLoader_h
-#define DocumentThreadableLoader_h
+#pragma once
-#include "CachedRawResourceClient.h"
-#include "CachedResourceHandle.h"
-#include "FrameLoaderTypes.h"
+#include "ContentSecurityPolicy.h"
+#include "CrossOriginPreflightChecker.h"
+#include "ResourceResponse.h"
+#include "SecurityOrigin.h"
#include "ThreadableLoader.h"
-#include <wtf/Forward.h>
-#include <wtf/OwnPtr.h>
-#include <wtf/PassRefPtr.h>
-#include <wtf/RefCounted.h>
-#include <wtf/RefPtr.h>
-#include <wtf/text/WTFString.h>
namespace WebCore {
class CachedRawResource;
+ class ContentSecurityPolicy;
class Document;
- class URL;
- class ResourceRequest;
- class SecurityOrigin;
class ThreadableLoaderClient;
class DocumentThreadableLoader : public RefCounted<DocumentThreadableLoader>, public ThreadableLoader, private CachedRawResourceClient {
WTF_MAKE_FAST_ALLOCATED;
public:
- static void loadResourceSynchronously(Document*, const ResourceRequest&, ThreadableLoaderClient&, const ThreadableLoaderOptions&);
- static PassRefPtr<DocumentThreadableLoader> create(Document*, ThreadableLoaderClient*, const ResourceRequest&, const ThreadableLoaderOptions&);
+ static void loadResourceSynchronously(Document&, ResourceRequest&&, ThreadableLoaderClient&, const ThreadableLoaderOptions&, RefPtr<SecurityOrigin>&&, std::unique_ptr<ContentSecurityPolicy>&&);
+ static void loadResourceSynchronously(Document&, ResourceRequest&&, ThreadableLoaderClient&, const ThreadableLoaderOptions&);
+
+ enum class ShouldLogError { No, Yes };
+ static RefPtr<DocumentThreadableLoader> create(Document&, ThreadableLoaderClient&, ResourceRequest&&, const ThreadableLoaderOptions&, RefPtr<SecurityOrigin>&&, std::unique_ptr<ContentSecurityPolicy>&&, String&& referrer, ShouldLogError);
+ static RefPtr<DocumentThreadableLoader> create(Document&, ThreadableLoaderClient&, ResourceRequest&&, const ThreadableLoaderOptions&, String&& referrer = String());
+
virtual ~DocumentThreadableLoader();
- virtual void cancel();
+ void cancel() override;
virtual void setDefersLoading(bool);
+ friend CrossOriginPreflightChecker;
+ friend class InspectorInstrumentation;
+ friend class InspectorNetworkAgent;
+
using RefCounted<DocumentThreadableLoader>::ref;
using RefCounted<DocumentThreadableLoader>::deref;
protected:
- virtual void refThreadableLoader() { ref(); }
- virtual void derefThreadableLoader() { deref(); }
+ void refThreadableLoader() override { ref(); }
+ void derefThreadableLoader() override { deref(); }
private:
enum BlockingBehavior {
@@ -73,42 +75,65 @@ namespace WebCore {
LoadAsynchronously
};
- DocumentThreadableLoader(Document*, ThreadableLoaderClient*, BlockingBehavior, const ResourceRequest&, const ThreadableLoaderOptions&);
+ DocumentThreadableLoader(Document&, ThreadableLoaderClient&, BlockingBehavior, ResourceRequest&&, const ThreadableLoaderOptions&, RefPtr<SecurityOrigin>&&, std::unique_ptr<ContentSecurityPolicy>&&, String&&, ShouldLogError);
void clearResource();
// CachedRawResourceClient
- virtual void dataSent(CachedResource*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
- virtual void responseReceived(CachedResource*, const ResourceResponse&);
- virtual void dataReceived(CachedResource*, const char* data, int dataLength);
- virtual void redirectReceived(CachedResource*, ResourceRequest&, const ResourceResponse&);
- virtual void notifyFinished(CachedResource*);
-
- void didReceiveResponse(unsigned long identifier, const ResourceResponse&);
+ void dataSent(CachedResource&, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
+ void responseReceived(CachedResource&, const ResourceResponse&) override;
+ void dataReceived(CachedResource&, const char* data, int dataLength) override;
+ void redirectReceived(CachedResource&, ResourceRequest&, const ResourceResponse&) override;
+ void finishedTimingForWorkerLoad(CachedResource&, const ResourceTiming&) override;
+ void notifyFinished(CachedResource&) override;
+
+ void didReceiveResponse(unsigned long identifier, const ResourceResponse&, ResourceResponse::Tainting);
void didReceiveData(unsigned long identifier, const char* data, int dataLength);
void didFinishLoading(unsigned long identifier, double finishTime);
void didFail(unsigned long identifier, const ResourceError&);
- void makeCrossOriginAccessRequest(const ResourceRequest&);
- void makeSimpleCrossOriginAccessRequest(const ResourceRequest& request);
- void makeCrossOriginAccessRequestWithPreflight(const ResourceRequest& request);
- void preflightSuccess();
- void preflightFailure(unsigned long identifier, const String& url, const String& errorDescription);
+ void makeCrossOriginAccessRequest(ResourceRequest&&);
+ void makeSimpleCrossOriginAccessRequest(ResourceRequest&&);
+ void makeCrossOriginAccessRequestWithPreflight(ResourceRequest&&);
+ void preflightSuccess(ResourceRequest&&);
+ void preflightFailure(unsigned long identifier, const ResourceError&);
+
+#if ENABLE(WEB_TIMING)
+ void finishedTimingForWorkerLoad(const ResourceTiming&);
+#endif
- void loadRequest(const ResourceRequest&, SecurityCheckPolicy);
+ void loadRequest(ResourceRequest&&, SecurityCheckPolicy);
bool isAllowedRedirect(const URL&);
+ bool isAllowedByContentSecurityPolicy(const URL&, ContentSecurityPolicy::RedirectResponseReceived);
- SecurityOrigin* securityOrigin() const;
+ bool isXMLHttpRequest() const final;
+
+ SecurityOrigin& securityOrigin() const;
+ const ContentSecurityPolicy& contentSecurityPolicy() const;
+
+ Document& document() { return m_document; }
+ const ThreadableLoaderOptions& options() const { return m_options; }
+ const String& referrer() const { return m_referrer; }
+ bool isLoading() { return m_resource || m_preflightChecker; }
+
+ void reportRedirectionWithBadScheme(const URL&);
+ void reportContentSecurityPolicyError(const URL&);
+ void reportCrossOriginResourceSharingError(const URL&);
+ void logErrorAndFail(const ResourceError&);
CachedResourceHandle<CachedRawResource> m_resource;
ThreadableLoaderClient* m_client;
- Document* m_document;
+ Document& m_document;
ThreadableLoaderOptions m_options;
+ RefPtr<SecurityOrigin> m_origin;
+ String m_referrer;
bool m_sameOriginRequest;
bool m_simpleRequest;
bool m_async;
- OwnPtr<ResourceRequest> m_actualRequest; // non-null during Access Control preflight checks
+ std::unique_ptr<ContentSecurityPolicy> m_contentSecurityPolicy;
+ std::optional<CrossOriginPreflightChecker> m_preflightChecker;
+ std::optional<HTTPHeaderMap> m_originalHeaders;
+
+ ShouldLogError m_shouldLogError;
};
} // namespace WebCore
-
-#endif // DocumentThreadableLoader_h