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#include "config.h"
32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebURLResponse.h"
33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "ResourceResponse.h"
35e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "ResourceLoadTiming.h"
36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebHTTPHeaderVisitor.h"
384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "WebHTTPLoadInfo.h"
39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebString.h"
40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebURL.h"
41e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "WebURLLoadTiming.h"
42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebURLResponsePrivate.h"
43643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
44e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include <wtf/RefPtr.h>
45e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
46643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockusing namespace WebCore;
47643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
48643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit {
49643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
50643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// The standard implementation of WebURLResponsePrivate, which maintains
51643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// ownership of a ResourceResponse instance.
52643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebURLResponsePrivateImpl : public WebURLResponsePrivate {
53643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic:
54643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebURLResponsePrivateImpl()
55643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    {
56643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        m_resourceResponse = &m_resourceResponseAllocation;
57643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
59643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    WebURLResponsePrivateImpl(const WebURLResponsePrivate* p)
60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        : m_resourceResponseAllocation(*p->m_resourceResponse)
61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    {
62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        m_resourceResponse = &m_resourceResponseAllocation;
63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    }
64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void dispose() { delete this; }
66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ResourceResponse m_resourceResponseAllocation;
68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block};
69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
70643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::initialize()
71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    assign(new WebURLResponsePrivateImpl());
73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
75643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::reset()
76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    assign(0);
78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
80643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::assign(const WebURLResponse& r)
81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (&r != this)
83643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        assign(r.m_private ? new WebURLResponsePrivateImpl(r.m_private) : 0);
84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
85643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
86643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool WebURLResponse::isNull() const
87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return !m_private || m_private->m_resourceResponse->isNull();
89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
91643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebURL WebURLResponse::url() const
92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->m_resourceResponse->url();
94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
96643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::setURL(const WebURL& url)
97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->m_resourceResponse->setURL(url);
99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
101e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeunsigned WebURLResponse::connectionID() const
102e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
103e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    return m_private->m_resourceResponse->connectionID();
104e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
105e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
106e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid WebURLResponse::setConnectionID(unsigned connectionID)
107e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
108e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    m_private->m_resourceResponse->setConnectionID(connectionID);
109e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
110e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
111967717af5423377c967781471ee106e2bb4e11c8Ben Murdochbool WebURLResponse::connectionReused() const
112967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{
113967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    return m_private->m_resourceResponse->connectionReused();
114967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch}
115967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
116967717af5423377c967781471ee106e2bb4e11c8Ben Murdochvoid WebURLResponse::setConnectionReused(bool connectionReused)
117967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{
118967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    m_private->m_resourceResponse->setConnectionReused(connectionReused);
119967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch}
120967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
121e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkeWebURLLoadTiming WebURLResponse::loadTiming()
122e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
123e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    return WebURLLoadTiming(m_private->m_resourceResponse->resourceLoadTiming());
124e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
125e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
126e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid WebURLResponse::setLoadTiming(const WebURLLoadTiming& timing)
127e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
128e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    RefPtr<ResourceLoadTiming> loadTiming = PassRefPtr<ResourceLoadTiming>(timing);
129e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    m_private->m_resourceResponse->setResourceLoadTiming(loadTiming.release());
130e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
131e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
1324576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) WangWebHTTPLoadInfo WebURLResponse::httpLoadInfo()
133a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
1344576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return WebHTTPLoadInfo(m_private->m_resourceResponse->resourceLoadInfo());
135a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
136a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
1374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangvoid WebURLResponse::setHTTPLoadInfo(const WebHTTPLoadInfo& value)
138a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
1394576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    m_private->m_resourceResponse->setResourceLoadInfo(value);
140a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
141a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
1426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsendouble WebURLResponse::responseTime() const
1436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
1446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    return m_private->m_resourceResponse->responseTime();
1456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
1466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenvoid WebURLResponse::setResponseTime(double responseTime)
1486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
1496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    m_private->m_resourceResponse->setResponseTime(responseTime);
1506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
1516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
152643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebString WebURLResponse::mimeType() const
153643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
154643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->m_resourceResponse->mimeType();
155643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
156643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
157643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::setMIMEType(const WebString& mimeType)
158643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
159643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->m_resourceResponse->setMimeType(mimeType);
160643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
161643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
162643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocklong long WebURLResponse::expectedContentLength() const
163643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
164643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->m_resourceResponse->expectedContentLength();
165643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
166643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
167643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::setExpectedContentLength(long long expectedContentLength)
168643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
169643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->m_resourceResponse->setExpectedContentLength(expectedContentLength);
170643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
171643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
172643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebString WebURLResponse::textEncodingName() const
173643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
174643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->m_resourceResponse->textEncodingName();
175643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
176643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
177643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::setTextEncodingName(const WebString& textEncodingName)
178643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
179643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->m_resourceResponse->setTextEncodingName(textEncodingName);
180643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
181643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
182643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebString WebURLResponse::suggestedFileName() const
183643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
184643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->m_resourceResponse->suggestedFilename();
185643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
186643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
187643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::setSuggestedFileName(const WebString& suggestedFileName)
188643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
189643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->m_resourceResponse->setSuggestedFilename(suggestedFileName);
190643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
191643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
192643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockint WebURLResponse::httpStatusCode() const
193643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
194643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->m_resourceResponse->httpStatusCode();
195643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
196643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
197643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::setHTTPStatusCode(int httpStatusCode)
198643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
199643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->m_resourceResponse->setHTTPStatusCode(httpStatusCode);
200643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
201643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
202643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebString WebURLResponse::httpStatusText() const
203643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
204643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->m_resourceResponse->httpStatusText();
205643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
206643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
207643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::setHTTPStatusText(const WebString& httpStatusText)
208643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
209643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->m_resourceResponse->setHTTPStatusText(httpStatusText);
210643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
211643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
212643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebString WebURLResponse::httpHeaderField(const WebString& name) const
213643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
214643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->m_resourceResponse->httpHeaderField(name);
215643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
216643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
217643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::setHTTPHeaderField(const WebString& name, const WebString& value)
218643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
219643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->m_resourceResponse->setHTTPHeaderField(name, value);
220643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
221643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
222643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::addHTTPHeaderField(const WebString& name, const WebString& value)
223643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
224dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    if (name.isNull() || value.isNull())
225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        return;
226643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // FIXME: Add an addHTTPHeaderField method to ResourceResponse.
227643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const HTTPHeaderMap& map = m_private->m_resourceResponse->httpHeaderFields();
228643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    String valueStr(value);
229643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    pair<HTTPHeaderMap::iterator, bool> result =
230643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        const_cast<HTTPHeaderMap*>(&map)->add(name, valueStr);
231643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (!result.second)
232643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        result.first->second += ", " + valueStr;
233643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
234643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
235643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::clearHTTPHeaderField(const WebString& name)
236643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
237643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // FIXME: Add a clearHTTPHeaderField method to ResourceResponse.
238643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const HTTPHeaderMap& map = m_private->m_resourceResponse->httpHeaderFields();
239643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const_cast<HTTPHeaderMap*>(&map)->remove(name);
240643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
241643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
242643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::visitHTTPHeaderFields(WebHTTPHeaderVisitor* visitor) const
243643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
244643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const HTTPHeaderMap& map = m_private->m_resourceResponse->httpHeaderFields();
245643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    for (HTTPHeaderMap::const_iterator it = map.begin(); it != map.end(); ++it)
246643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        visitor->visitHeader(it->first, it->second);
247643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
248643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
249643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockdouble WebURLResponse::lastModifiedDate() const
250643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
251643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return static_cast<double>(m_private->m_resourceResponse->lastModifiedDate());
252643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
253643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
254643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::setLastModifiedDate(double lastModifiedDate)
255643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
256643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->m_resourceResponse->setLastModifiedDate(static_cast<time_t>(lastModifiedDate));
257643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
258643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
259643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocklong long WebURLResponse::appCacheID() const
260643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
261643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->m_resourceResponse->appCacheID();
262643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
263643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
264643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::setAppCacheID(long long appCacheID)
265643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
266643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->m_resourceResponse->setAppCacheID(appCacheID);
267643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
268643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
269643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebURL WebURLResponse::appCacheManifestURL() const
270643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
271643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->m_resourceResponse->appCacheManifestURL();
272643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
273643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
274643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::setAppCacheManifestURL(const WebURL& url)
275643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
276643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->m_resourceResponse->setAppCacheManifestURL(url);
277643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
278643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
279643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebCString WebURLResponse::securityInfo() const
280643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
281643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // FIXME: getSecurityInfo is misnamed.
282643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->m_resourceResponse->getSecurityInfo();
283643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
284643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
285643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::setSecurityInfo(const WebCString& securityInfo)
286643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
287643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private->m_resourceResponse->setSecurityInfo(securityInfo);
288643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
289643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
290643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockResourceResponse& WebURLResponse::toMutableResourceResponse()
291643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
292643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ASSERT(m_private);
293643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ASSERT(m_private->m_resourceResponse);
294643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
295643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return *m_private->m_resourceResponse;
296643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
297643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
298643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockconst ResourceResponse& WebURLResponse::toResourceResponse() const
299643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
300643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ASSERT(m_private);
301643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ASSERT(m_private->m_resourceResponse);
302643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
303643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return *m_private->m_resourceResponse;
304643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
305643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
306e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkebool WebURLResponse::wasCached() const
307e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
308e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    return m_private->m_resourceResponse->wasCached();
309e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
310e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
311e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkevoid WebURLResponse::setWasCached(bool value)
312e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
313e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    m_private->m_resourceResponse->setWasCached(value);
314e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
315e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
316d0825bca7fe65beaee391d30da42e937db621564Steve Blockbool WebURLResponse::wasFetchedViaSPDY() const
317d0825bca7fe65beaee391d30da42e937db621564Steve Block{
318d0825bca7fe65beaee391d30da42e937db621564Steve Block    return m_private->m_resourceResponse->wasFetchedViaSPDY();
319d0825bca7fe65beaee391d30da42e937db621564Steve Block}
320d0825bca7fe65beaee391d30da42e937db621564Steve Block
321d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid WebURLResponse::setWasFetchedViaSPDY(bool value)
322d0825bca7fe65beaee391d30da42e937db621564Steve Block{
323d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_private->m_resourceResponse->setWasFetchedViaSPDY(value);
324d0825bca7fe65beaee391d30da42e937db621564Steve Block}
325d0825bca7fe65beaee391d30da42e937db621564Steve Block
3266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenbool WebURLResponse::wasNpnNegotiated() const
3276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
3286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    return m_private->m_resourceResponse->wasNpnNegotiated();
3296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
3306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
3316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenvoid WebURLResponse::setWasNpnNegotiated(bool value)
3326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
3336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    m_private->m_resourceResponse->setWasNpnNegotiated(value);
3346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
3356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
33606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenbool WebURLResponse::wasAlternateProtocolAvailable() const
33706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{
33806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    return m_private->m_resourceResponse->wasAlternateProtocolAvailable();
33906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}
34006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
34106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenvoid WebURLResponse::setWasAlternateProtocolAvailable(bool value)
34206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{
34306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    m_private->m_resourceResponse->setWasAlternateProtocolAvailable(value);
34406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}
34506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
346545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochbool WebURLResponse::wasFetchedViaProxy() const
347545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
348545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    return m_private->m_resourceResponse->wasFetchedViaProxy();
349545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
350545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
351545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid WebURLResponse::setWasFetchedViaProxy(bool value)
352545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
353545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    m_private->m_resourceResponse->setWasFetchedViaProxy(value);
354545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
355545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
356dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockbool WebURLResponse::isMultipartPayload() const
357dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
358dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return m_private->m_resourceResponse->isMultipartPayload();
359dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
360dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
361dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid WebURLResponse::setIsMultipartPayload(bool value)
362dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
363dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    m_private->m_resourceResponse->setIsMultipartPayload(value);
364dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
365dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
366967717af5423377c967781471ee106e2bb4e11c8Ben MurdochWebString WebURLResponse::downloadFilePath() const
367967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{
36881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return m_private->m_resourceResponse->downloadFilePath();
369967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch}
370967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
371967717af5423377c967781471ee106e2bb4e11c8Ben Murdochvoid WebURLResponse::setDownloadFilePath(const WebString& downloadFilePath)
372967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{
37381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_private->m_resourceResponse->setDownloadFilePath(downloadFilePath.utf8().data());
37481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
37581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
37681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochWebString WebURLResponse::remoteIPAddress() const
37781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
37881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return m_private->m_resourceResponse->remoteIPAddress();
37981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
38081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
38181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebURLResponse::setRemoteIPAddress(const WebString& remoteIPAddress)
38281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
38381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_private->m_resourceResponse->setRemoteIPAddress(remoteIPAddress);
384967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch}
385967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
38681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochunsigned short WebURLResponse::remotePort() const
3872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
38881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return m_private->m_resourceResponse->remotePort();
3892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
3902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
39181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebURLResponse::setRemotePort(unsigned short remotePort)
3922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
39381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_private->m_resourceResponse->setRemotePort(remotePort);
3942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
3952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
396643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebURLResponse::assign(WebURLResponsePrivate* p)
397643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
398643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // Subclasses may call this directly so a self-assignment check is needed
399643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // here as well as in the public assign method.
400643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (m_private == p)
401643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        return;
402643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    if (m_private)
403643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        m_private->dispose();
404643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_private = p;
405643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
406643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
407643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit
408