blob: 6e360a7c088518cf3716c2cd6e4d4ed661c22e56 [file] [log] [blame]
// -*- mode: c++; c-basic-offset: 4 -*-
/*
* Copyright (C) 2003, 2006 Apple Computer, Inc. All rights reserved.
* Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef ResourceRequestBase_h
#define ResourceRequestBase_h
#include "FormData.h"
#include "KURL.h"
#include "HTTPHeaderMap.h"
namespace WebCore {
enum ResourceRequestCachePolicy {
UseProtocolCachePolicy, // normal load
ReloadIgnoringCacheData, // reload
ReturnCacheDataElseLoad, // back/forward or encoding change - allow stale data
ReturnCacheDataDontLoad, // results of a post - allow stale data and only use cache
};
const int unspecifiedTimeoutInterval = INT_MAX;
class ResourceRequest;
// Do not use this type directly. Use ResourceRequest instead.
class ResourceRequestBase {
public:
bool isNull() const;
bool isEmpty() const;
const KURL& url() const;
void setURL(const KURL& url);
const ResourceRequestCachePolicy cachePolicy() const;
void setCachePolicy(ResourceRequestCachePolicy cachePolicy);
double timeoutInterval() const;
void setTimeoutInterval(double timeoutInterval);
const KURL& mainDocumentURL() const;
void setMainDocumentURL(const KURL& mainDocumentURL);
const String& httpMethod() const;
void setHTTPMethod(const String& httpMethod);
const HTTPHeaderMap& httpHeaderFields() const;
String httpHeaderField(const String& name) const;
void setHTTPHeaderField(const String& name, const String& value);
void addHTTPHeaderField(const String& name, const String& value);
void addHTTPHeaderFields(const HTTPHeaderMap& headerFields);
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() { m_httpHeaderFields.remove("Referer"); }
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); }
FormData* httpBody() const;
void setHTTPBody(PassRefPtr<FormData> httpBody);
bool allowHTTPCookies() const;
void setAllowHTTPCookies(bool allowHTTPCookies);
bool isConditional() const;
protected:
// Used when ResourceRequest is initialized from a platform representation of the request
ResourceRequestBase()
: m_resourceRequestUpdated(false)
, m_platformRequestUpdated(true)
{
}
ResourceRequestBase(const KURL& url, ResourceRequestCachePolicy policy)
: m_url(url)
, m_cachePolicy(policy)
, m_timeoutInterval(unspecifiedTimeoutInterval)
, m_httpMethod("GET")
, m_allowHTTPCookies(true)
, m_resourceRequestUpdated(true)
, m_platformRequestUpdated(false)
{
}
void updatePlatformRequest() const;
void updateResourceRequest() const;
KURL m_url;
ResourceRequestCachePolicy m_cachePolicy;
double m_timeoutInterval;
KURL m_mainDocumentURL;
String m_httpMethod;
HTTPHeaderMap m_httpHeaderFields;
RefPtr<FormData> m_httpBody;
bool m_allowHTTPCookies;
mutable bool m_resourceRequestUpdated;
mutable bool m_platformRequestUpdated;
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); }
} // namespace WebCore
#endif // ResourceRequestBase_h