2 * Copyright (C) 2017 NAVER Corp. All rights reserved.
3 * Copyright (C) 2017 Sony Interactive Entertainment Inc.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #include "Credential.h"
32 #include "CurlRequestClient.h"
33 #include "ResourceRequest.h"
38 class MultipartHandle;
40 class ResourceResponse;
42 class ResourceHandleCurlDelegate final : public ThreadSafeRefCounted<ResourceHandleCurlDelegate>, public CurlRequestClient {
44 ResourceHandleCurlDelegate(ResourceHandle*);
45 ~ResourceHandleCurlDelegate();
47 bool hasHandle() const;
53 void setDefersLoading(bool);
54 void setAuthentication(const String&, const String&);
56 void dispatchSynchronousJob();
58 void continueDidReceiveResponse();
59 void platformContinueSynchronousDidReceiveResponse();
61 void continueWillSendRequest(ResourceRequest&&);
64 // Called from main thread.
65 ResourceResponse& response();
67 std::pair<String, String> getCredential(ResourceRequest&, bool);
69 bool cancelledOrClientless();
71 Ref<CurlRequest> createCurlRequest(ResourceRequest&);
72 void curlDidReceiveResponse(const CurlResponse&) override;
73 void curlDidReceiveBuffer(Ref<SharedBuffer>&&) override;
74 void curlDidComplete() override;
75 void curlDidFailWithError(const ResourceError&) override;
77 void continueAfterDidReceiveResponse();
79 bool shouldRedirectAsGET(const ResourceRequest&, bool crossOrigin);
80 void willSendRequest();
81 void continueAfterWillSendRequest(ResourceRequest&&);
85 // Used by main thread.
86 ResourceHandle* m_handle;
87 std::unique_ptr<MultipartHandle> m_multipartHandle;
88 unsigned m_authFailureCount { 0 };
89 unsigned m_redirectCount { 0 };
91 ResourceRequest m_firstRequest;
92 ResourceRequest m_currentRequest;
93 bool m_shouldUseCredentialStorage;
96 Credential m_initialCredential;
98 bool m_addedCacheValidationHeaders { false };
99 RefPtr<CurlRequest> m_curlRequest;
102 } // namespace WebCore