[Resource Timing] Gather timing information with reliable responseEnd time
[WebKit-https.git] / Source / WebKit2 / NetworkProcess / Downloads / PendingDownload.h
1 /*
2  * Copyright (C) 2016 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef PendingDownload_h
27 #define PendingDownload_h
28
29 #if USE(NETWORK_SESSION)
30
31 #include "MessageSender.h"
32 #include "NetworkLoadClient.h"
33
34 namespace WebCore {
35 class ResourceResponse;
36 }
37
38 namespace WebKit {
39
40 class DownloadID;
41 class NetworkLoad;
42 class NetworkLoadParameters;
43 class NetworkSession;
44     
45 class PendingDownload : public NetworkLoadClient, public IPC::MessageSender {
46     WTF_MAKE_FAST_ALLOCATED;
47 public:
48     PendingDownload(NetworkLoadParameters&&, DownloadID, NetworkSession&, const String& suggestedName);
49     PendingDownload(std::unique_ptr<NetworkLoad>&&, DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
50
51     void continueWillSendRequest(WebCore::ResourceRequest&&);
52 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
53     void continueCanAuthenticateAgainstProtectionSpace(bool canAuthenticate);
54 #endif
55     void cancel();
56
57 private:    
58     // NetworkLoadClient.
59     void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override { }
60 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
61     void canAuthenticateAgainstProtectionSpaceAsync(const WebCore::ProtectionSpace&) override;
62 #endif
63     bool isSynchronous() const override { return false; }
64     void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) override;
65     ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) override { return ShouldContinueDidReceiveResponse::No; };
66     void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) override { };
67     void didFinishLoading(const WebCore::NetworkLoadMetrics&) override { };
68     void didFailLoading(const WebCore::ResourceError&) override;
69
70     // MessageSender.
71     IPC::Connection* messageSenderConnection() override;
72     uint64_t messageSenderDestinationID() override;
73
74 private:
75     std::unique_ptr<NetworkLoad> m_networkLoad;
76 };
77
78 }
79
80 #endif
81
82 #endif