1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/* 2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved. 3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without 5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are 6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met: 7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions of source code must retain the above copyright 9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer. 10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions in binary form must reproduce the above 11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer 12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the 13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution. 14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Neither the name of Google Inc. nor the names of its 15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from 16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission. 17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */ 30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef WebURLResponse_h 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define WebURLResponse_h 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebCommon.h" 35a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebPrivateOwnPtr.h" 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if defined(WEBKIT_IMPLEMENTATION) 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebCore { class ResourceResponse; } 39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit { 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 43643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebCString; 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebHTTPHeaderVisitor; 454576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass WebHTTPLoadInfo; 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebString; 47643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebURL; 48e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeclass WebURLLoadTiming; 49643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebURLResponsePrivate; 50643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 51643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebURLResponse { 52643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic: 53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ~WebURLResponse() { reset(); } 54643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 55643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebURLResponse() : m_private(0) { } 56643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebURLResponse(const WebURLResponse& r) : m_private(0) { assign(r); } 57643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebURLResponse& operator=(const WebURLResponse& r) 58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 59643ca7872b450ea4efacab6188849e5aac2ba161Steve Block assign(r); 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return *this; 61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block explicit WebURLResponse(const WebURL& url) : m_private(0) 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block initialize(); 66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block setURL(url); 67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void initialize(); 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void reset(); 71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void assign(const WebURLResponse&); 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API bool isNull() const; 74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API WebURL url() const; 76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void setURL(const WebURL&); 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 78e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke WEBKIT_API unsigned connectionID() const; 79e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke WEBKIT_API void setConnectionID(unsigned); 80e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 81967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch WEBKIT_API bool connectionReused() const; 82967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch WEBKIT_API void setConnectionReused(bool); 83967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 84e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke WEBKIT_API WebURLLoadTiming loadTiming(); 85e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke WEBKIT_API void setLoadTiming(const WebURLLoadTiming&); 86e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 874576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang WEBKIT_API WebHTTPLoadInfo httpLoadInfo(); 884576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang WEBKIT_API void setHTTPLoadInfo(const WebHTTPLoadInfo&); 89a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen WEBKIT_API double responseTime() const; 916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen WEBKIT_API void setResponseTime(double); 926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API WebString mimeType() const; 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void setMIMEType(const WebString&); 95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API long long expectedContentLength() const; 97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void setExpectedContentLength(long long); 98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API WebString textEncodingName() const; 100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void setTextEncodingName(const WebString&); 101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API WebString suggestedFileName() const; 103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void setSuggestedFileName(const WebString&); 104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API int httpStatusCode() const; 106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void setHTTPStatusCode(int); 107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API WebString httpStatusText() const; 109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void setHTTPStatusText(const WebString&); 110643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 111643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API WebString httpHeaderField(const WebString& name) const; 112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void setHTTPHeaderField(const WebString& name, const WebString& value); 113643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void addHTTPHeaderField(const WebString& name, const WebString& value); 114643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void clearHTTPHeaderField(const WebString& name); 115643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void visitHTTPHeaderFields(WebHTTPHeaderVisitor*) const; 116643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 117643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API double lastModifiedDate() const; 118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void setLastModifiedDate(double); 119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 120643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API long long appCacheID() const; 121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void setAppCacheID(long long); 122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API WebURL appCacheManifestURL() const; 124643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void setAppCacheManifestURL(const WebURL&); 125643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 126643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // A consumer controlled value intended to be used to record opaque 127643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // security info related to this request. 128643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API WebCString securityInfo() const; 129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WEBKIT_API void setSecurityInfo(const WebCString&); 130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if defined(WEBKIT_IMPLEMENTATION) 132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebCore::ResourceResponse& toMutableResourceResponse(); 133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const WebCore::ResourceResponse& toResourceResponse() const; 134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 135643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 136e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke // Flag whether this request was served from the disk cache entry. 137e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke WEBKIT_API bool wasCached() const; 138e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke WEBKIT_API void setWasCached(bool); 139e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 140d0825bca7fe65beaee391d30da42e937db621564Steve Block // Flag whether this request was loaded via the SPDY protocol or not. 141d0825bca7fe65beaee391d30da42e937db621564Steve Block // SPDY is an experimental web protocol, see http://dev.chromium.org/spdy 142d0825bca7fe65beaee391d30da42e937db621564Steve Block WEBKIT_API bool wasFetchedViaSPDY() const; 143d0825bca7fe65beaee391d30da42e937db621564Steve Block WEBKIT_API void setWasFetchedViaSPDY(bool); 144d0825bca7fe65beaee391d30da42e937db621564Steve Block 1456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Flag whether this request was loaded after the TLS/Next-Protocol-Negotiation was used. 1466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // This is related to SPDY. 1476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen WEBKIT_API bool wasNpnNegotiated() const; 1486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen WEBKIT_API void setWasNpnNegotiated(bool); 1496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 15006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // Flag whether this request was made when "Alternate-Protocol: xxx" 15106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // is present in server's response. 15206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen WEBKIT_API bool wasAlternateProtocolAvailable() const; 15306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen WEBKIT_API void setWasAlternateProtocolAvailable(bool); 15406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 155545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // Flag whether this request was loaded via an explicit proxy (HTTP, SOCKS, etc). 156545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch WEBKIT_API bool wasFetchedViaProxy() const; 157545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch WEBKIT_API void setWasFetchedViaProxy(bool); 158545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Flag whether this request is part of a multipart response. 160dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WEBKIT_API bool isMultipartPayload() const; 161dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WEBKIT_API void setIsMultipartPayload(bool); 162dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 163967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch // This indicates the location of a downloaded response if the 164967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch // WebURLRequest had the downloadToFile flag set to true. This file path 165967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch // remains valid for the lifetime of the WebURLLoader used to create it. 166967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch WEBKIT_API WebString downloadFilePath() const; 167967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch WEBKIT_API void setDownloadFilePath(const WebString&); 168967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 16981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Remote IP address of the socket which fetched this resource. 17081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WEBKIT_API WebString remoteIPAddress() const; 17181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WEBKIT_API void setRemoteIPAddress(const WebString&); 17281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 17381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Remote port number of the socket which fetched this resource. 17481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WEBKIT_API unsigned short remotePort() const; 17581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch WEBKIT_API void setRemotePort(unsigned short); 1762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 177643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprotected: 178643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void assign(WebURLResponsePrivate*); 179643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 180643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprivate: 181643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebURLResponsePrivate* m_private; 182643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 183643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 184643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit 185643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 186643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 187