ResourceRequestBase.h [plain text]
#ifndef ResourceRequestBase_h
#define ResourceRequestBase_h
#include "FormData.h"
#include "KURL.h"
#include "HTTPHeaderMap.h"
#include "loader.h" // for Loader::Priority
#include <wtf/OwnPtr.h>
namespace WebCore {
enum ResourceRequestCachePolicy {
UseProtocolCachePolicy, ReloadIgnoringCacheData, ReturnCacheDataElseLoad, ReturnCacheDataDontLoad, };
const int unspecifiedTimeoutInterval = INT_MAX;
class ResourceRequest;
struct CrossThreadResourceRequestData;
class ResourceRequestBase : public FastAllocBase {
public:
enum TargetType {
TargetIsMainFrame,
TargetIsSubframe,
TargetIsSubresource, TargetIsStyleSheet,
TargetIsScript,
TargetIsFontResource,
TargetIsImage,
TargetIsObject,
TargetIsMedia,
TargetIsWorker,
TargetIsSharedWorker
};
static PassOwnPtr<ResourceRequest> adopt(PassOwnPtr<CrossThreadResourceRequestData>);
PassOwnPtr<CrossThreadResourceRequestData> copyData() const;
bool isNull() const;
bool isEmpty() const;
const KURL& url() const;
void setURL(const KURL& url);
void removeCredentials();
ResourceRequestCachePolicy cachePolicy() const;
void setCachePolicy(ResourceRequestCachePolicy cachePolicy);
double timeoutInterval() const;
void setTimeoutInterval(double timeoutInterval);
const KURL& firstPartyForCookies() const;
void setFirstPartyForCookies(const KURL& firstPartyForCookies);
const String& httpMethod() const;
void setHTTPMethod(const String& httpMethod);
const HTTPHeaderMap& httpHeaderFields() const;
String httpHeaderField(const AtomicString& name) const;
String httpHeaderField(const char* name) const;
void setHTTPHeaderField(const AtomicString& name, const String& value);
void setHTTPHeaderField(const char* name, const String& value);
void addHTTPHeaderField(const AtomicString& name, const String& value);
void addHTTPHeaderFields(const HTTPHeaderMap& headerFields);
void clearHTTPAuthorization();
String httpContentType() const { return httpHeaderField("Content-Type"); }
void setHTTPContentType(const String& httpContentType) { setHTTPHeaderField("Content-Type", httpContentType); }
String httpReferrer() const { return httpHeaderField("Referer"); }
void setHTTPReferrer(const String& httpReferrer) { setHTTPHeaderField("Referer", httpReferrer); }
void clearHTTPReferrer();
String httpOrigin() const { return httpHeaderField("Origin"); }
void setHTTPOrigin(const String& httpOrigin) { setHTTPHeaderField("Origin", httpOrigin); }
void clearHTTPOrigin();
String httpUserAgent() const { return httpHeaderField("User-Agent"); }
void setHTTPUserAgent(const String& httpUserAgent) { setHTTPHeaderField("User-Agent", httpUserAgent); }
String httpAccept() const { return httpHeaderField("Accept"); }
void setHTTPAccept(const String& httpAccept) { setHTTPHeaderField("Accept", httpAccept); }
void setResponseContentDispositionEncodingFallbackArray(const String& encoding1, const String& encoding2 = String(), const String& encoding3 = String());
FormData* httpBody() const;
void setHTTPBody(PassRefPtr<FormData> httpBody);
bool allowCookies() const;
void setAllowCookies(bool allowCookies);
bool isConditional() const;
bool reportUploadProgress() const { return m_reportUploadProgress; }
void setReportUploadProgress(bool reportUploadProgress) { m_reportUploadProgress = reportUploadProgress; }
inline void setPriority(Loader::Priority priority) { m_priority = priority; }
inline Loader::Priority priority() const { return m_priority; }
TargetType targetType() const { return m_targetType; }
void setTargetType(TargetType type) { m_targetType = type; }
protected:
ResourceRequestBase()
: m_resourceRequestUpdated(false)
, m_platformRequestUpdated(true)
, m_reportUploadProgress(false)
, m_priority(Loader::Low)
, m_targetType(TargetIsSubresource)
{
}
ResourceRequestBase(const KURL& url, ResourceRequestCachePolicy policy)
: m_url(url)
, m_cachePolicy(policy)
, m_timeoutInterval(unspecifiedTimeoutInterval)
, m_httpMethod("GET")
, m_allowCookies(true)
, m_resourceRequestUpdated(true)
, m_platformRequestUpdated(false)
, m_reportUploadProgress(false)
, m_priority(Loader::Low)
, m_targetType(TargetIsSubresource)
{
}
void updatePlatformRequest() const;
void updateResourceRequest() const;
KURL m_url;
ResourceRequestCachePolicy m_cachePolicy;
double m_timeoutInterval;
KURL m_firstPartyForCookies;
String m_httpMethod;
HTTPHeaderMap m_httpHeaderFields;
Vector<String> m_responseContentDispositionEncodingFallbackArray;
RefPtr<FormData> m_httpBody;
bool m_allowCookies;
mutable bool m_resourceRequestUpdated;
mutable bool m_platformRequestUpdated;
bool m_reportUploadProgress;
Loader::Priority m_priority;
TargetType m_targetType;
private:
const ResourceRequest& asResourceRequest() const;
};
bool equalIgnoringHeaderFields(const ResourceRequestBase&, const ResourceRequestBase&);
bool operator==(const ResourceRequestBase&, const ResourceRequestBase&);
inline bool operator!=(ResourceRequestBase& a, const ResourceRequestBase& b) { return !(a == b); }
struct CrossThreadResourceRequestData : Noncopyable {
KURL m_url;
ResourceRequestCachePolicy m_cachePolicy;
double m_timeoutInterval;
KURL m_firstPartyForCookies;
String m_httpMethod;
OwnPtr<CrossThreadHTTPHeaderMapData> m_httpHeaders;
Vector<String> m_responseContentDispositionEncodingFallbackArray;
RefPtr<FormData> m_httpBody;
bool m_allowCookies;
ResourceRequestBase::TargetType m_targetType;
Loader::Priority m_priority;
};
unsigned initializeMaximumHTTPConnectionCountPerHost();
}
#endif // ResourceRequestBase_h