WebKit/chromium/src/WebURLResponse.cpp
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     1 /*
       
     2  * Copyright (C) 2009 Google Inc. All rights reserved.
       
     3  *
       
     4  * Redistribution and use in source and binary forms, with or without
       
     5  * modification, are permitted provided that the following conditions are
       
     6  * met:
       
     7  *
       
     8  *     * Redistributions of source code must retain the above copyright
       
     9  * notice, this list of conditions and the following disclaimer.
       
    10  *     * Redistributions in binary form must reproduce the above
       
    11  * copyright notice, this list of conditions and the following disclaimer
       
    12  * in the documentation and/or other materials provided with the
       
    13  * distribution.
       
    14  *     * Neither the name of Google Inc. nor the names of its
       
    15  * contributors may be used to endorse or promote products derived from
       
    16  * this software without specific prior written permission.
       
    17  *
       
    18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
       
    19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
       
    20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
       
    21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
       
    22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
       
    23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
       
    24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
       
    25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
       
    26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
       
    27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
       
    28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    29  */
       
    30 
       
    31 #include "config.h"
       
    32 #include "WebURLResponse.h"
       
    33 
       
    34 #include "ResourceResponse.h"
       
    35 #include "ResourceLoadTiming.h"
       
    36 
       
    37 #include "WebHTTPHeaderVisitor.h"
       
    38 #include "WebString.h"
       
    39 #include "WebURL.h"
       
    40 #include "WebURLLoadTiming.h"
       
    41 #include "WebURLResponsePrivate.h"
       
    42 
       
    43 #include <wtf/RefPtr.h>
       
    44 
       
    45 using namespace WebCore;
       
    46 
       
    47 namespace WebKit {
       
    48 
       
    49 // The standard implementation of WebURLResponsePrivate, which maintains
       
    50 // ownership of a ResourceResponse instance.
       
    51 class WebURLResponsePrivateImpl : public WebURLResponsePrivate {
       
    52 public:
       
    53     WebURLResponsePrivateImpl()
       
    54     {
       
    55         m_resourceResponse = &m_resourceResponseAllocation;
       
    56     }
       
    57 
       
    58     WebURLResponsePrivateImpl(const WebURLResponsePrivate* p)
       
    59         : m_resourceResponseAllocation(*p->m_resourceResponse)
       
    60     {
       
    61         m_resourceResponse = &m_resourceResponseAllocation;
       
    62     }
       
    63 
       
    64     virtual void dispose() { delete this; }
       
    65 
       
    66     ResourceResponse m_resourceResponseAllocation;
       
    67 };
       
    68 
       
    69 void WebURLResponse::initialize()
       
    70 {
       
    71     assign(new WebURLResponsePrivateImpl());
       
    72 }
       
    73 
       
    74 void WebURLResponse::reset()
       
    75 {
       
    76     assign(0);
       
    77 }
       
    78 
       
    79 void WebURLResponse::assign(const WebURLResponse& r)
       
    80 {
       
    81     if (&r != this)
       
    82         assign(r.m_private ? new WebURLResponsePrivateImpl(r.m_private) : 0);
       
    83 }
       
    84 
       
    85 bool WebURLResponse::isNull() const
       
    86 {
       
    87     return !m_private || m_private->m_resourceResponse->isNull();
       
    88 }
       
    89 
       
    90 WebURL WebURLResponse::url() const
       
    91 {
       
    92     return m_private->m_resourceResponse->url();
       
    93 }
       
    94 
       
    95 void WebURLResponse::setURL(const WebURL& url)
       
    96 {
       
    97     m_private->m_resourceResponse->setURL(url);
       
    98 }
       
    99 
       
   100 unsigned WebURLResponse::connectionID() const
       
   101 {
       
   102     return m_private->m_resourceResponse->connectionID();
       
   103 }
       
   104 
       
   105 void WebURLResponse::setConnectionID(unsigned connectionID)
       
   106 {
       
   107     m_private->m_resourceResponse->setConnectionID(connectionID);
       
   108 }
       
   109 
       
   110 bool WebURLResponse::connectionReused() const
       
   111 {
       
   112     return m_private->m_resourceResponse->connectionReused();
       
   113 }
       
   114 
       
   115 void WebURLResponse::setConnectionReused(bool connectionReused)
       
   116 {
       
   117     m_private->m_resourceResponse->setConnectionReused(connectionReused);
       
   118 }
       
   119 
       
   120 WebURLLoadTiming WebURLResponse::loadTiming()
       
   121 {
       
   122     return WebURLLoadTiming(m_private->m_resourceResponse->resourceLoadTiming());
       
   123 }
       
   124 
       
   125 void WebURLResponse::setLoadTiming(const WebURLLoadTiming& timing)
       
   126 {
       
   127     RefPtr<ResourceLoadTiming> loadTiming = PassRefPtr<ResourceLoadTiming>(timing);
       
   128     m_private->m_resourceResponse->setResourceLoadTiming(loadTiming.release());
       
   129 }
       
   130 
       
   131 double WebURLResponse::responseTime() const
       
   132 {
       
   133     return m_private->m_resourceResponse->responseTime();
       
   134 }
       
   135 
       
   136 void WebURLResponse::setResponseTime(double responseTime)
       
   137 {
       
   138     m_private->m_resourceResponse->setResponseTime(responseTime);
       
   139 }
       
   140 
       
   141 WebString WebURLResponse::mimeType() const
       
   142 {
       
   143     return m_private->m_resourceResponse->mimeType();
       
   144 }
       
   145 
       
   146 void WebURLResponse::setMIMEType(const WebString& mimeType)
       
   147 {
       
   148     m_private->m_resourceResponse->setMimeType(mimeType);
       
   149 }
       
   150 
       
   151 long long WebURLResponse::expectedContentLength() const
       
   152 {
       
   153     return m_private->m_resourceResponse->expectedContentLength();
       
   154 }
       
   155 
       
   156 void WebURLResponse::setExpectedContentLength(long long expectedContentLength)
       
   157 {
       
   158     m_private->m_resourceResponse->setExpectedContentLength(expectedContentLength);
       
   159 }
       
   160 
       
   161 WebString WebURLResponse::textEncodingName() const
       
   162 {
       
   163     return m_private->m_resourceResponse->textEncodingName();
       
   164 }
       
   165 
       
   166 void WebURLResponse::setTextEncodingName(const WebString& textEncodingName)
       
   167 {
       
   168     m_private->m_resourceResponse->setTextEncodingName(textEncodingName);
       
   169 }
       
   170 
       
   171 WebString WebURLResponse::suggestedFileName() const
       
   172 {
       
   173     return m_private->m_resourceResponse->suggestedFilename();
       
   174 }
       
   175 
       
   176 void WebURLResponse::setSuggestedFileName(const WebString& suggestedFileName)
       
   177 {
       
   178     m_private->m_resourceResponse->setSuggestedFilename(suggestedFileName);
       
   179 }
       
   180 
       
   181 int WebURLResponse::httpStatusCode() const
       
   182 {
       
   183     return m_private->m_resourceResponse->httpStatusCode();
       
   184 }
       
   185 
       
   186 void WebURLResponse::setHTTPStatusCode(int httpStatusCode)
       
   187 {
       
   188     m_private->m_resourceResponse->setHTTPStatusCode(httpStatusCode);
       
   189 }
       
   190 
       
   191 WebString WebURLResponse::httpStatusText() const
       
   192 {
       
   193     return m_private->m_resourceResponse->httpStatusText();
       
   194 }
       
   195 
       
   196 void WebURLResponse::setHTTPStatusText(const WebString& httpStatusText)
       
   197 {
       
   198     m_private->m_resourceResponse->setHTTPStatusText(httpStatusText);
       
   199 }
       
   200 
       
   201 WebString WebURLResponse::httpHeaderField(const WebString& name) const
       
   202 {
       
   203     return m_private->m_resourceResponse->httpHeaderField(name);
       
   204 }
       
   205 
       
   206 void WebURLResponse::setHTTPHeaderField(const WebString& name, const WebString& value)
       
   207 {
       
   208     m_private->m_resourceResponse->setHTTPHeaderField(name, value);
       
   209 }
       
   210 
       
   211 void WebURLResponse::addHTTPHeaderField(const WebString& name, const WebString& value)
       
   212 {
       
   213     if (name.isNull() || value.isNull())
       
   214         return;
       
   215     // FIXME: Add an addHTTPHeaderField method to ResourceResponse.
       
   216     const HTTPHeaderMap& map = m_private->m_resourceResponse->httpHeaderFields();
       
   217     String valueStr(value);
       
   218     pair<HTTPHeaderMap::iterator, bool> result =
       
   219         const_cast<HTTPHeaderMap*>(&map)->add(name, valueStr);
       
   220     if (!result.second)
       
   221         result.first->second += ", " + valueStr;
       
   222 }
       
   223 
       
   224 void WebURLResponse::clearHTTPHeaderField(const WebString& name)
       
   225 {
       
   226     // FIXME: Add a clearHTTPHeaderField method to ResourceResponse.
       
   227     const HTTPHeaderMap& map = m_private->m_resourceResponse->httpHeaderFields();
       
   228     const_cast<HTTPHeaderMap*>(&map)->remove(name);
       
   229 }
       
   230 
       
   231 void WebURLResponse::visitHTTPHeaderFields(WebHTTPHeaderVisitor* visitor) const
       
   232 {
       
   233     const HTTPHeaderMap& map = m_private->m_resourceResponse->httpHeaderFields();
       
   234     for (HTTPHeaderMap::const_iterator it = map.begin(); it != map.end(); ++it)
       
   235         visitor->visitHeader(it->first, it->second);
       
   236 }
       
   237 
       
   238 double WebURLResponse::lastModifiedDate() const
       
   239 {
       
   240     return static_cast<double>(m_private->m_resourceResponse->lastModifiedDate());
       
   241 }
       
   242 
       
   243 void WebURLResponse::setLastModifiedDate(double lastModifiedDate)
       
   244 {
       
   245     m_private->m_resourceResponse->setLastModifiedDate(static_cast<time_t>(lastModifiedDate));
       
   246 }
       
   247 
       
   248 bool WebURLResponse::isContentFiltered() const
       
   249 {
       
   250     return m_private->m_resourceResponse->isContentFiltered();
       
   251 }
       
   252 
       
   253 void WebURLResponse::setIsContentFiltered(bool isContentFiltered)
       
   254 {
       
   255     m_private->m_resourceResponse->setIsContentFiltered(isContentFiltered);
       
   256 }
       
   257 
       
   258 long long WebURLResponse::appCacheID() const
       
   259 {
       
   260     return m_private->m_resourceResponse->appCacheID();
       
   261 }
       
   262 
       
   263 void WebURLResponse::setAppCacheID(long long appCacheID)
       
   264 {
       
   265     m_private->m_resourceResponse->setAppCacheID(appCacheID);
       
   266 }
       
   267 
       
   268 WebURL WebURLResponse::appCacheManifestURL() const
       
   269 {
       
   270     return m_private->m_resourceResponse->appCacheManifestURL();
       
   271 }
       
   272 
       
   273 void WebURLResponse::setAppCacheManifestURL(const WebURL& url)
       
   274 {
       
   275     m_private->m_resourceResponse->setAppCacheManifestURL(url);
       
   276 }
       
   277 
       
   278 WebCString WebURLResponse::securityInfo() const
       
   279 {
       
   280     // FIXME: getSecurityInfo is misnamed.
       
   281     return m_private->m_resourceResponse->getSecurityInfo();
       
   282 }
       
   283 
       
   284 void WebURLResponse::setSecurityInfo(const WebCString& securityInfo)
       
   285 {
       
   286     m_private->m_resourceResponse->setSecurityInfo(securityInfo);
       
   287 }
       
   288 
       
   289 ResourceResponse& WebURLResponse::toMutableResourceResponse()
       
   290 {
       
   291     ASSERT(m_private);
       
   292     ASSERT(m_private->m_resourceResponse);
       
   293 
       
   294     return *m_private->m_resourceResponse;
       
   295 }
       
   296 
       
   297 const ResourceResponse& WebURLResponse::toResourceResponse() const
       
   298 {
       
   299     ASSERT(m_private);
       
   300     ASSERT(m_private->m_resourceResponse);
       
   301 
       
   302     return *m_private->m_resourceResponse;
       
   303 }
       
   304 
       
   305 bool WebURLResponse::wasCached() const
       
   306 {
       
   307     return m_private->m_resourceResponse->wasCached();
       
   308 }
       
   309 
       
   310 void WebURLResponse::setWasCached(bool value)
       
   311 {
       
   312     m_private->m_resourceResponse->setWasCached(value);
       
   313 }
       
   314 
       
   315 bool WebURLResponse::wasFetchedViaSPDY() const
       
   316 {
       
   317     return m_private->m_resourceResponse->wasFetchedViaSPDY();
       
   318 }
       
   319 
       
   320 void WebURLResponse::setWasFetchedViaSPDY(bool value)
       
   321 {
       
   322     m_private->m_resourceResponse->setWasFetchedViaSPDY(value);
       
   323 }
       
   324 
       
   325 bool WebURLResponse::wasNpnNegotiated() const
       
   326 {
       
   327     return m_private->m_resourceResponse->wasNpnNegotiated();
       
   328 }
       
   329 
       
   330 void WebURLResponse::setWasNpnNegotiated(bool value)
       
   331 {
       
   332     m_private->m_resourceResponse->setWasNpnNegotiated(value);
       
   333 }
       
   334 
       
   335 bool WebURLResponse::wasAlternateProtocolAvailable() const
       
   336 {
       
   337     return m_private->m_resourceResponse->wasAlternateProtocolAvailable();
       
   338 }
       
   339 
       
   340 void WebURLResponse::setWasAlternateProtocolAvailable(bool value)
       
   341 {
       
   342     m_private->m_resourceResponse->setWasAlternateProtocolAvailable(value);
       
   343 }
       
   344 
       
   345 bool WebURLResponse::wasFetchedViaProxy() const
       
   346 {
       
   347     return m_private->m_resourceResponse->wasFetchedViaProxy();
       
   348 }
       
   349 
       
   350 void WebURLResponse::setWasFetchedViaProxy(bool value)
       
   351 {
       
   352     m_private->m_resourceResponse->setWasFetchedViaProxy(value);
       
   353 }
       
   354 
       
   355 bool WebURLResponse::isMultipartPayload() const
       
   356 {
       
   357     return m_private->m_resourceResponse->isMultipartPayload();
       
   358 }
       
   359 
       
   360 void WebURLResponse::setIsMultipartPayload(bool value)
       
   361 {
       
   362     m_private->m_resourceResponse->setIsMultipartPayload(value);
       
   363 }
       
   364 
       
   365 WebString WebURLResponse::downloadFilePath() const
       
   366 {
       
   367     return m_private->m_downloadFilePath;
       
   368 }
       
   369 
       
   370 void WebURLResponse::setDownloadFilePath(const WebString& downloadFilePath)
       
   371 {
       
   372     m_private->m_downloadFilePath = downloadFilePath;
       
   373 }
       
   374 
       
   375 void WebURLResponse::assign(WebURLResponsePrivate* p)
       
   376 {
       
   377     // Subclasses may call this directly so a self-assignment check is needed
       
   378     // here as well as in the public assign method.
       
   379     if (m_private == p)
       
   380         return;
       
   381     if (m_private)
       
   382         m_private->dispose();
       
   383     m_private = p;
       
   384 }
       
   385 
       
   386 } // namespace WebKit