[PAL] Move spi/cf directory into PAL
[WebKit.git] / Source / WebCore / platform / network / cf / ResourceResponse.h
1 /*
2  * Copyright (C) 2006 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. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #pragma once
27
28 #include "ResourceResponseBase.h"
29 #include <wtf/RetainPtr.h>
30
31 #if USE(CFURLCONNECTION)
32 #include <pal/spi/cf/CFNetworkSPI.h>
33 #endif
34
35 OBJC_CLASS NSURLResponse;
36
37 namespace WebCore {
38
39 class ResourceResponse : public ResourceResponseBase {
40 public:
41     ResourceResponse()
42         : m_initLevel(AllFields)
43     {
44     }
45
46 #if USE(CFURLCONNECTION)
47     ResourceResponse(CFURLResponseRef cfResponse)
48         : m_initLevel(Uninitialized)
49         , m_cfResponse(cfResponse)
50     {
51         m_isNull = !cfResponse;
52     }
53 #if PLATFORM(COCOA)
54     WEBCORE_EXPORT ResourceResponse(NSURLResponse *);
55 #endif
56 #else
57     ResourceResponse(NSURLResponse *nsResponse)
58         : m_initLevel(Uninitialized)
59         , m_nsResponse(nsResponse)
60     {
61         m_isNull = !nsResponse;
62     }
63 #endif
64
65     ResourceResponse(const URL& url, const String& mimeType, long long expectedLength, const String& textEncodingName)
66         : ResourceResponseBase(url, mimeType, expectedLength, textEncodingName)
67         , m_initLevel(AllFields)
68     {
69     }
70
71 #if PLATFORM(COCOA)
72     WEBCORE_EXPORT void disableLazyInitialization();
73 #endif
74
75     unsigned memoryUsage() const
76     {
77         // FIXME: Find some programmatic lighweight way to calculate ResourceResponse and associated classes.
78         // This is a rough estimate of resource overhead based on stats collected from memory usage tests.
79         return 3800;
80         /*  1280 * 2 +                // average size of ResourceResponse. Doubled to account for the WebCore copy and the CF copy.
81                                       // Mostly due to the size of the hash maps, the Header Map strings and the URL.
82             256 * 2                   // Overhead from ResourceRequest, doubled to account for WebCore copy and CF copy.
83                                       // Mostly due to the URL and Header Map.
84          */
85     }
86
87 #if USE(CFURLCONNECTION)
88     WEBCORE_EXPORT CFURLResponseRef cfURLResponse() const;
89 #endif
90 #if PLATFORM(COCOA)
91     WEBCORE_EXPORT NSURLResponse *nsURLResponse() const;
92 #endif
93
94 #if USE(QUICK_LOOK)
95     bool isQuickLook() const { return m_isQuickLook; }
96     void setIsQuickLook(bool isQuickLook) { m_isQuickLook = isQuickLook; }
97 #endif
98
99 private:
100     friend class ResourceResponseBase;
101
102     void platformLazyInit(InitLevel);
103     String platformSuggestedFilename() const;
104     CertificateInfo platformCertificateInfo() const;
105
106 #if PLATFORM(COCOA)
107     void initNSURLResponse() const;
108 #endif
109
110     static bool platformCompare(const ResourceResponse& a, const ResourceResponse& b);
111
112     unsigned m_initLevel : 3;
113
114 #if USE(QUICK_LOOK)
115     bool m_isQuickLook { false };
116 #endif
117
118 #if USE(CFURLCONNECTION)
119     mutable RetainPtr<CFURLResponseRef> m_cfResponse;
120 #endif
121 #if PLATFORM(COCOA)
122     mutable RetainPtr<NSURLResponse> m_nsResponse;
123 #endif
124 };
125
126 } // namespace WebCore