cd9760db48261be6ff8192f6ab124b7a8267399d
[WebKit-https.git] / Source / WebCore / platform / network / blackberry / ResourceRequest.h
1 /*
2  * Copyright (C) 2009, 2010 Research In Motion Limited. All rights reserved.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18
19 #ifndef ResourceRequest_h
20 #define ResourceRequest_h
21
22 #include "ResourceRequestBase.h"
23
24 namespace BlackBerry {
25 namespace Platform {
26 class NetworkRequest;
27 }
28 }
29
30 namespace WebCore {
31
32 class ResourceRequest : public ResourceRequestBase {
33 public:
34     // The type of this ResourceRequest, based on how the resource will be used.
35     enum TargetType {
36         TargetIsMainFrame,
37         TargetIsSubframe,
38         TargetIsSubresource, // Resource is a generic subresource. (Generally a specific type should be specified)
39         TargetIsStyleSheet,
40         TargetIsScript,
41         TargetIsFontResource,
42         TargetIsImage,
43         TargetIsObject,
44         TargetIsMedia,
45         TargetIsWorker,
46         TargetIsSharedWorker,
47         TargetIsPrefetch,
48         TargetIsPrerender,
49         TargetIsFavicon,
50         TargetIsXHR,
51         TargetIsTextTrack,
52         TargetIsUnspecified,
53     };
54     ResourceRequest(const String& url)
55         : ResourceRequestBase(KURL(ParsedURLString, url), UseProtocolCachePolicy)
56         , m_isXMLHTTPRequest(false)
57         , m_mustHandleInternally(false)
58         , m_isRequestedByPlugin(false)
59         , m_forceDownload(false)
60     {
61     }
62
63     ResourceRequest(const KURL& url)
64         : ResourceRequestBase(url, UseProtocolCachePolicy)
65         , m_isXMLHTTPRequest(false)
66         , m_mustHandleInternally(false)
67         , m_isRequestedByPlugin(false)
68         , m_forceDownload(false)
69     {
70     }
71
72     ResourceRequest(const KURL& url, const String& referrer, ResourceRequestCachePolicy policy = UseProtocolCachePolicy)
73         : ResourceRequestBase(url, policy)
74         , m_isXMLHTTPRequest(false)
75         , m_mustHandleInternally(false)
76         , m_isRequestedByPlugin(false)
77         , m_forceDownload(false)
78     {
79         setHTTPReferrer(referrer);
80     }
81
82     ResourceRequest()
83         : ResourceRequestBase(KURL(), UseProtocolCachePolicy)
84         , m_isXMLHTTPRequest(false)
85         , m_mustHandleInternally(false)
86         , m_isRequestedByPlugin(false)
87         , m_forceDownload(false)
88     {
89     }
90
91     void setToken(const String& token) { m_token = token; }
92     String token() const { return m_token; }
93
94     // FIXME: For RIM Bug #452. The BlackBerry application wants the anchor text for a clicked hyperlink so as to
95     // make an informed decision as to whether to allow the navigation. We should move this functionality into a
96     // UI/Policy delegate.
97     void setAnchorText(const String& anchorText) { m_anchorText = anchorText; }
98     String anchorText() const { return m_anchorText; }
99
100     void setOverrideContentType(const String& contentType) { m_overrideContentType = contentType; }
101     String overrideContentType() const { return m_overrideContentType; }
102
103     void setIsXMLHTTPRequest(bool isXMLHTTPRequest) { m_isXMLHTTPRequest = isXMLHTTPRequest; }
104     bool isXMLHTTPRequest() const { return m_isXMLHTTPRequest; }
105
106     void setIsRequestedByPlugin(bool isRequestedByPlugin) { m_isRequestedByPlugin = isRequestedByPlugin; }
107     bool isRequestedByPlugin() const { return m_isRequestedByPlugin; }
108
109     // Marks requests which must be handled by webkit even if LinksHandledExternally is set.
110     void setMustHandleInternally(bool mustHandleInternally) { m_mustHandleInternally = mustHandleInternally; }
111     bool mustHandleInternally() const { return m_mustHandleInternally; }
112
113     void initializePlatformRequest(BlackBerry::Platform::NetworkRequest&, bool isInitial = false) const;
114     void setForceDownload(bool forceDownload) { m_forceDownload = true; }
115     bool forceDownload() const { return m_forceDownload; }
116
117     // What this request is for.
118     TargetType targetType() const { return m_targetType; }
119     void setTargetType(TargetType type) { m_targetType = type; }
120
121 private:
122     friend class ResourceRequestBase;
123
124     String m_token;
125     String m_anchorText;
126     String m_overrideContentType;
127     bool m_isXMLHTTPRequest;
128     bool m_mustHandleInternally;
129     bool m_isRequestedByPlugin;
130     bool m_forceDownload;
131     TargetType m_targetType;
132
133     void doUpdatePlatformRequest() { }
134     void doUpdateResourceRequest() { }
135
136     PassOwnPtr<CrossThreadResourceRequestData> doPlatformCopyData(PassOwnPtr<CrossThreadResourceRequestData>) const;
137     void doPlatformAdopt(PassOwnPtr<CrossThreadResourceRequestData>);
138 };
139
140 struct CrossThreadResourceRequestData : public CrossThreadResourceRequestDataBase {
141     String m_token;
142     String m_anchorText;
143     bool m_isXMLHTTPRequest;
144     bool m_mustHandleInternally;
145     bool m_isRequestedByPlugin;
146     bool m_forceDownload;
147 };
148
149 } // namespace WebCore
150
151 #endif // ResourceRequest_h